最近在学R,试着用ggplot,找了一个比较完整的用python做的案例,想着把所有的结果都用R做一遍。
一开始是一些描述性统计和直方图之类的东西,找书和经验贴都找到了相关的程序。可是却遇到了一个困扰了我好几天的图:
图1
一开始我只会画简单的单个的图,复杂点的比如改轴的刻度、显不显示图例等等我都是不会调的。
今天从晚上六点半开始就一直试图模仿一下这个。
目录
2、绘制点图(xlim(2,12)这行代码是后加上去的,就忘了写“+”)
1、多个图组合到一张图中
library(ggplot2)
library(cowplot) #下载这个包并调用
a <- ggplot(crop,aes(x=temperature))+#--温度
geom_histogram(aes(y=..density..),color='white',fill='red',
alpha=.35,binwidth=3.4)+
scale_x_continuous(breaks = seq(10,45,5))+
geom_density(color='red')
b <- ggplot(crop,aes(rainfall))+ #----降水
geom_histogram(aes(y=..density..),color='white',fill='blue',
alpha=.25,binwidth = 28)+
scale_x_continuous(breaks = seq(50,300,50))+
geom_density(color='blue')
c <- ggplot(crop,aes(ph))+#-----------ph
geom_histogram(aes(y=..density..),color='white',fill='orange',
alpha=.35,binwidth = .4)+
scale_x_continuous(breaks = c(5:9))+
geom_density(color='orange')
d <- ggplot(crop,aes(humidity))+#----------湿度
geom_histogram(aes(y=..density..),color='white',fill='purple',
alpha=.35,binwidth = 5)+
scale_x_continuous(breaks = seq(20,100,20))+
geom_density(color='purple')
plot_grid(a,b,c,d,nrow=2) #把上边的四个图组合到一起
于是它输出了图2
图2
完全符合预期,接下来试着做上边那张棘手的图1。
2、绘制点图(xlim(2,12)这行代码是后加上去的,就忘了写“+”)
g <- ggplot(crop,mapping = aes(x=ph,y=temperature,col=label))+ #散点图
geom_point(size=3)+ #点的大小
xlim(2,12)+ #x轴的范围设置为2到12
guides(color=guide_legend(override.aes = list(size=2)))+#图例颜色
guides(shape=guide_legend(override.aes = list(size=2)))+#图例形状
theme(legend.position = c(.88,.28), #图例的位置在输出的图里边,默认在图外边的右侧
legend.title = element_text(size =5),
legend.text = element_text(size=5),#图例的文字大小
legend.background = element_rect(
fill = "#EBEBEB", # 填充色
colour = "#EBEBEB", # 框线色
size = 1.5 ))
输出图3
图3
这里颜色的代码是通过微信截图得到颜色的RGB值,然后去网上找对应的代码
PS:如果修改代码的话一定不要忘了写“+”,这里的xlim和下一段的我都是后加上去的,就忘了写,结果输出来好多奇形怪状的结果。
3、改变轴的显示样式(不显示图标、刻度、轴的名字)
h <- ggplot(crop,aes(x=ph,fill=label,col=label))+ #ph的密度曲线
geom_density(alpha=.35)+xlim(2,12)+ #密度图透明度设置为0.35,x轴范围为2—12,如果是填程序上去别忘了写“+”
theme(legend.position = 'none')+ #不显示图例#,axis.ticks = element_blank(),axis.text = element_blank()后边这一部分是不显示坐标轴文字和刻度
xlab(NULL) #轴的标签不显示
i <- ggplot(crop,aes(x=temperature,fill=label,col=label))+
geom_density(alpha=.35)+
theme(legend.position = 'none')+
coord_flip()+xlab(NULL) #颠倒坐标轴
经过多次试验,如果我想让图 g 和图 h 的横轴对齐、图 g 和图 i 的纵轴对齐,我只好让图 h 的纵轴的名称、图 i 的横轴的名称及坐标轴刻度和数字都显示出来才行。
而且对于图 i ,最开始x轴是温度、y轴是密度,对调轴之后X是密度、Y是温度。我不想让温度显示出来,但是还是要写成X。在这想到了一句小品台词:“你大爷永远是你大爷”。
输出图4、5
图4
图5
4、设置合适的比例和留白
要试着做的图1 只有三个部分有图,还有个部分是空白的。按下边这个代码做即可输出带有留白的图片
plot_grid(h,NULL,g,i,nrow=2,byrow=T,rel_widths = c(4,1),rel_heights = c(1,3))
#rel_widths:左图与右图的宽度比,rel_heights:上图与下图的高度比
输出效果如图6
图6
可能这是今天最有成就感的结果啦!还是要坚持不懈地尝试下去呀!