码迷,mamicode.com
首页 > 其他好文 > 详细

ggplot2–绘制分布图

时间:2016-04-10 14:40:13      阅读:243      评论:0      收藏:0      [点我收藏+]

标签:

本文更新地址: http://blog.csdn.net/tanzuozhev/article/details/51106291

本文在 http://www.cookbook-r.com/Graphs/Plotting_distributions_(ggplot2)/ 的基础上加入了自己的理解

生成绘图数据

set.seed(1234)
dat <- data.frame(cond = factor(rep(c("A","B"), each=200)), 
                   rating = c(rnorm(200),rnorm(200, mean=.8)))
# View first few rows
head(dat)
##   cond     rating
## 1    A -1.2070657
## 2    A  0.2774292
## 3    A  1.0844412
## 4    A -2.3456977
## 5    A  0.4291247
## 6    A  0.5060559
library(ggplot2)

直方图和概率密度图

## Basic histogram from the vector "rating". Each bin is .5 wide.
## These both result in the same output:
ggplot(dat, aes(x=rating)) + geom_histogram(binwidth=.5) # rating作为横轴

技术分享

# 
ggplot(dat, aes(x=rating)) +
    geom_histogram(binwidth=.5, 
    colour="black", # 边框颜色 
    fill="white" #填充颜色
 )

技术分享

ggplot(dat, aes(x=rating)) + geom_density() # 添加密度曲线

技术分享

# Histogram overlaid with kernel density curve
ggplot(dat, aes(x=rating)) + 
    geom_histogram(aes(y=..density..),      # 这一步很重要,使用density代替y轴
                   binwidth=.5,
                   colour="black", fill="white") +
    geom_density(alpha=.2, fill="#FF6666")  # 重叠部分采用透明设置

技术分享

添加一条均值线(红色部分)

ggplot(dat, aes(x=rating)) +
    geom_histogram(binwidth=.5, colour="black", fill="white") +
    geom_vline(aes(xintercept=mean(rating, na.rm=T)),   # Ignore NA values for mean
               color="red", linetype="dashed", size=1)

技术分享

多组数据的直方图和密度图

# cond作为各组的分类,以颜色填充作为区别
# position的处理很重要,决定数据存在重叠是的处理方式 "identity" 不做处理,但是设置了透明
ggplot(dat, aes(x=rating, fill=cond)) +
    geom_histogram(binwidth=.5, alpha=.5, position="identity")

技术分享

# Interleaved histograms
ggplot(dat, aes(x=rating, fill=cond)) +
    geom_histogram(binwidth=.5, position="dodge")

技术分享

# dodge 表示重叠部分进行偏离

# 密度图
ggplot(dat, aes(x=rating, colour=cond)) + geom_density()

技术分享

# 半透明的填充
ggplot(dat, aes(x=rating, fill=cond)) + geom_density(alpha=.3)

技术分享

Add lines for each mean requires first creating a separate data frame with the means:

# Find the mean of each group
library(plyr)
# 以 cond 作为分组, 计算每组的rating的均值
cdat <- ddply(dat, "cond", summarise, rating.mean=mean(rating))
cdat
##   cond rating.mean
## 1    A -0.05775928
## 2    B  0.87324927
# 绘制两组数据的均值
ggplot(dat, aes(x=rating, fill=cond)) +
    geom_histogram(binwidth=.5, alpha=.5, position="identity") +
    geom_vline(data=cdat, aes(xintercept=rating.mean,  colour=cond),
               linetype="dashed", size=1)

技术分享

# 密度图
ggplot(dat, aes(x=rating, colour=cond)) +
    geom_density() +
    geom_vline(data=cdat, aes(xintercept=rating.mean,  colour=cond),
               linetype="dashed", size=1)

技术分享

使用分面

按照 cond 进行分面处理, 上图为A,下图为B

# 按照 cond 进行分面处理, 上图为A,下图为B
ggplot(dat, aes(x=rating)) + geom_histogram(binwidth=.5, colour="black", fill="white") + 
    facet_grid(cond ~ .)

技术分享

# 添加均值线
ggplot(dat, aes(x=rating)) + geom_histogram(binwidth=.5, colour="black", fill="white") + 
    facet_grid(cond ~ .) +
    geom_vline(data=cdat, aes(xintercept=rating.mean),
               linetype="dashed", size=1, colour="red")

技术分享

箱线图

# A basic box plot
ggplot(dat, aes(x=cond, y=rating)) + geom_boxplot()

技术分享

# cond作为填充颜色的分类
ggplot(dat, aes(x=cond, y=rating, fill=cond)) + geom_boxplot()

技术分享

# The above adds a redundant legend. With the legend removed:
ggplot(dat, aes(x=cond, y=rating, fill=cond)) + geom_boxplot() +
    guides(fill=FALSE) # 关闭图例

技术分享

# With flipped axes
ggplot(dat, aes(x=cond, y=rating, fill=cond)) + geom_boxplot() + 
    guides(fill=FALSE) + 
  coord_flip() # x轴 y轴翻转

技术分享

使用 `stat_summary’ 添加均值

# Add a diamond at the mean, and make it larger
ggplot(dat, aes(x=cond, y=rating)) + geom_boxplot() +
    stat_summary(fun.y=mean, geom="point", shape=5, size=4)

技术分享

ggplot2–绘制分布图

标签:

原文地址:http://blog.csdn.net/tanzuozhev/article/details/51106291

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!