以r语言自带的数据包mpg为例,mpg包含了由美国环境保护协会收集的38种车型的观测数据。
要想将探索性图形转换为解释性图形,最容易的方法就是加上一些合适的标签。我们可以使用labs()
函数来添加标签,以下示例为图形添加了一个标题
ggplot(mpg,aes(displ,hwy))+
geom_point(aes(color=class))+
geom_smooth(se=F)+
labs(title = paste("Fuel efficiency generally decreases with","engine size"))
其中paste函数是的作用是,把中间的逗号去掉,比如
这样就添加了主标题
• subtitle可以在标题下以更小的字体添加更多附加信息。
• caption可以在图形右下角添加文本,常用于描述数据来源:
ggplot(mpg,aes(displ,hwy))+
geom_point(aes(color=class))+
geom_smooth(se=F)+
labs(title = paste("Fuel efficiency generally decreases with","engine size"
),subtitle=" 这是副标题",caption="统计局")
ggplot(mpg,aes(displ,hwy))+
geom_point(aes(color=class))+
geom_smooth(se=F)+
labs(x="这是x轴",y="这是y轴")
ggplot(c,aes(a,b))+geom_point()+labs(x=quote(x[i]),y=quote(x[i]^2))
geom_point(shape=15)#等于15就是正方形
geom_line(lty=)
的参数lty=2就是虚线
先使用dplyr选取出每类汽车中效率最高的型号,然后在图形中标记出来:
best<- mpg %>% group_by(class) %>% filter(row_number(desc(hwy)) == 1)
ggplot(mpg, aes(displ, hwy)) +
geom_point(aes(color = class)) +
geom_label( aes(label = model), data=best, nudge_y = 2, alpha = 0.5 )
这样就添加了标签,但是观察发现,这些数据标签还有重复的地方,下面使用ggrepel包避免数据的重叠
先下载这个包
install.packages("ggrepel")
library(ggrepel)
只需要把geom_label改为geom_label_repel
ggplot(mpg, aes(displ, hwy)) +
geom_point(aes(color = class)) +
geom_label_repel( aes(label = model), data=best , nudge_y = 2, alpha = 0.5 )
• 可以使用geom_hline()和geom_vline()函数添加参考线。我们经常使用加粗(size = 2)和白色(color = white)的直线作为参考线,并将它们绘制在基本数据层的下面。这样的参考线既清晰可见,又不至于喧宾夺主,影响我们查看数据。
以那个函数 y = x 2 y=x^2 y=x2为例
geom_hline(yintercept=10)
,添加一条横线,y=10
geom_vline(xintercept=8)
,添加一条竖线,x=8
geom_abline(slope=2,intercept=3)
.添加 y = 2 x + 3 y=2x+3 y=2x+3这条线
a<-c(1:10);b<-a*a
c<-data.frame(a,b)
ggplot(c,aes(a,b))+
geom_point()+labs(x=quote(x[i]),y=quote(x[i]^2))+
geom_hline(yintercept=15,size=2)+
geom_vline(xintercept = 8,color=2)+
geom_abline(slope=2,intercept=3)
这里size的值越大,添加的线条越粗
color的参数可以自己设置
从上面那张图可以看到,y轴是从0开始的,每个网格的间隔是12.5,现在我想让y从1开始,间隔为5
a<-c(1:10);b<-a*a
c<-data.frame(a,b)
ggplot(c,aes(a,b))+
geom_point()+labs(x=quote(x[i]),y=quote(x[i]^2))+
scale_y_continuous(breaks = seq(1,100,5))
其中seq(x,y,z)是是产生一个从x开始,间隔为z,小于等于y的向量,因为间隔可能不能整除z
如果也想更改x坐标轴的刻度,那还是一样的操作
a<-c(1:10);b<-a*a
c<-data.frame(a,b)
ggplot(c,aes(a,b,color=))+
geom_point()+labs(x=quote(x[i]),y=quote(x[i]^2))+
scale_y_continuous(breaks = seq(1,100,5))+
scale_x_continuous(breaks = seq(1,10,2))
如何把图例调到自己想要的位置呢?
这就需要theme(legend.position=“位置”),位置这里可以选择下面四个:
bottom放在底部,top放在顶部,right放在左面,right放在右面(默认)
当然你也可以选择legend.positon = "none"来取消整个图例的显示。
a<-c(1:10);b<-a*a
c<-data.frame(a,b)
ggplot(c,aes(a,b,color=a))+
geom_point()+labs(x=quote(x[i]),y=quote(x[i]^2))+
theme(legend.position = "bottom")
bottom放在底部,top放在顶部,right放在左面,right放在右面(默认)
theme_bw()可以更改图片的主题
a<-c(1:10);b<-a*a
c<-data.frame(a,b)
ggplot(c,aes(a,b,color=a))+
geom_point()+labs(x=quote(x[i]),y=quote(x[i]^2))+
theme_bw()
除此之外,你还可以在ggthemes扩展包里找到更多标题
https://jrnold.github.io/ggthemes/
比如:
library(ggthemes)
a<-c(1:10);b<-a*a
c<-data.frame(a,b)
ggplot(c,aes(a,b,color=a))+
geom_point()+labs(x=quote(x[i]),y=quote(x[i]^2))+
theme_economist()
其他的可以在我的这篇文章里找到
R语言ggplot2更改主题
需要用到ggsave
ggsave("1.pdf")
这样就把图片保存到了你的工作目录里
这时就需要用到showtext包
只需要这么三行代码(如果你已经下载了的话)
library(showtext)
font_add("STKAITI","C:/windows/Font/STKAITI.ttf")
showtext_auto()#自动调用showtext
STKAITI是我想使用的字体,后面是我的工作路径
如果你在使用Rmarkdown
控制图形大小的选项主要有5个:fig.width、fig.height、fig.asp、out.width和out.height
• 我们发现,宽度一致的图形是最令人赏心悦目的。为了使图形宽度保持一致,我们设置图形的默认参数为fig.width = 6(6英寸)和fig.asp = 0.618(黄金分割)。在单个代码段中,我们只调整fig.asp
。
• 我们使用out.width控制输出图形的大小,并将其设置为行宽的百分比。默认设置为out.width = "70%"和fig.align = "center"。这样一来,图形既不会占用过多空间,也不会显得太拥挤
。
• 如果想在一行中放置多个图形,可以将out.width设置为50%以放置2个图形、设置为33%以放置3个图形,或者设置为25%以放置4个图形,同时还要设置fig.align = "default"
。按照具体的说明方式(例如,是要展示数据还是要展示图形),我们也会根据情况调整fig.width,后面还会继续讨论这点。
如果你发现必须眯起眼睛才能看清图形上的文本,那么就需要调整fig.width参数。如果fig.width大于最终文档中的图形的尺寸,那么文本就会显得过小;如果fig.width小于最终文档中的图形的尺寸,那么文本就会显得过大。一般来说,你需要试验几次才能找到fig.width和最终文档中的图形的最佳比例。
本文来源