棒棒糖图,就是长得像棒棒糖一样的图(一句废话),和柱形图,散点图想要表达的意思是一致的,不过展示会更加好看一点,是点图geom_point()和堆叠图geom_segment()的组合,今天这篇文章主要介绍几种常见的棒棒图表现形式,以及一些美化。
0.准备工作
#读取数据
> data<-read.table("data.txt",header = T)
> head(data)
ID NUM
1 A_1 64
2 A_2 59
3 A_3 53
4 A_4 58
5 A_5 58
#调用R包
> library(tidyverse) #是一个包含了dplyr、ggplot2、tibble等包的集合包
1.基础绘图
> ggplot(data, aes(x=ID, y=NUM)) +
+ geom_segment( aes(x=ID, xend=ID, y=0, yend=NUM)) +
+ geom_point( size=5, color="red", fill=alpha("orange", 0.3), alpha=0.7, shape=21, stroke=2)
- size:点的大小
- color:点外圈的颜色
- fill:点填充的参数
- alpha:透明度 [0,1]
- shape:点的形状
- stroke:点描边的大小
2.改变线的类型
> ggplot(data, aes(x=ID, y=NUM)) +
+ geom_segment( aes(x=ID, xend=ID, y=0, yend=NUM),linetype="dotdash" ) +
+ geom_point( size=5, color="red", fill=alpha("orange", 0.3), alpha=0.7, shape=21, stroke=2)
-
在geom_segment()中加入linetype改变线的类型。
3.美化,改变主题
加入theme()函数对fig.1进行进一步优化,去掉背景颜色,增加Y轴标题等。
> ggplot(data, aes(x=ID, y=NUM))
+ geom_segment( aes(x=ID, xend=ID, y=0, yend=NUM))
+ geom_point( size=5, color="red", fill=alpha("orange", 0.3), alpha=0.7, shape=21, stroke=2)
+ theme_light()
+ theme(
+ panel.grid.major.x = element_blank(),
+ panel.border = element_blank(),
+ axis.ticks.x = element_blank()
+ )
+ xlab("")
+ ylab("Value of Y")
4.水平棒棒糖图
有时候我们需要水平的棒棒糖图,来和其他的图形组合,说明一些问题,只需要加入coord_flip()即可:
> ggplot(data, aes(x=ID, y=NUM))
+ geom_segment( aes(x=ID, xend=ID, y=0, yend=NUM))
+ geom_point( size=5, color="red", fill=alpha("orange", 0.3), alpha=0.7, shape=21, stroke=2)
+ theme_light()
+ coord_flip()
+ theme(
+ panel.grid.major.x = element_blank(),
+ panel.border = element_blank(),
+ axis.ticks.x = element_blank()
+ )
+ xlab("")
+ ylab("Value of Y")
5.调整坐标顺序
以上图中,可以看到R会自动对样本进行排序,在原文件中,样本的排序顺序为A_1- A_100,但在绘图时,会变为A1、A10、A100、A2。此时如果需要制定绘图顺序与文件中的顺序一致,需要在绘图前增加一步:
> data$ID=factor(data$ID,unique(data$ID))
重新绘图:
> ggplot(data, aes(x=ID, y=NUM))
+ geom_segment( aes(x=ID, xend=ID, y=0, yend=NUM))
+ geom_point( size=5, color="red", fill=alpha("orange", 0.3), alpha=0.7, shape=21, stroke=2)+theme_light()
+ coord_flip()
+ theme(
+ panel.grid.major.x = element_blank(),
+ panel.border = element_blank(),
+ axis.ticks.x = element_blank()
+ )
+ xlab("")
+ ylab("Value of Y")
这里看到Fig.5中的样本数量就与数据文件中一致了。
引用转载请注明出处,如有错误敬请指出。