本文内容来自个人做案例过程中遇到的一些问题,一是用普通的barplot(),所画条形图的条数太多,导致x轴的标签不能完全显示;二是用EXCEL可以解决一,但是画的条形图又不是太美观。因此,本文顺着这个方向,得到了一些启示,并对此作出总结。
- 总体参数
- 背景色设置
- x轴标签字体旋转一定的角度
- 设置坐标轴取值范围
- 添加数据
- 图例设置
- 保存图
- 保存中中文乱码解决
总体参数
geom_bar(mapping = NULL, data = NULL, stat = "count",
position = "stack", ..., width = NULL, binwidth = NULL, na.rm = FALSE,
show.legend = NA, inherit.aes = TRUE)
以下介绍参数含义及具体设置。
背景色设置
用ggplot画图时,默认的是带背景色,有时在做报告之类时,想要去掉背景色,可以通过panel.background=element_rect()设置为透明色即可。
p <- read.csv("diqu.csv")
library(ggplot2)
pl <- ggplot(data=p, aes(x=diqu, y=Freq,fill=diqu), fill=diqu) +
geom_bar(stat="identity")
pl
#背景色设为透明,边框为灰色
pl + theme(panel.background=element_rect(fill='transparent',color ="gray"))
虽然x轴标全部显示,但文在都连在了一起,下面将x轴标签字体旋转一定的角度。
x轴标签字体旋转一定的角度
#设定x轴坐标标签的文字方向,大小,颜色
pl + theme(panel.background=element_rect(fill='transparent',
color ="gray"),
axis.text.x = element_text(angle = 70, hjust = 0.5,
vjust = 0.5,color = "black",size=9))
看到上图武汉市明显比其他地区高出很多,下面对此进行设置。
设置坐标轴取值范围
#设置y轴取值范围
pl + theme(panel.background=element_rect(fill='transparent',
color ="gray"),
axis.text.x = element_text(angle = 70, hjust = 0.5,
vjust = 0.5,color = "black",size=9))+
ylim(0,250)#设置y轴取值范围
到此,其实就差不多了,但是上图最上方边框是有网格线,下面进行删除并在图中添加数据。
添加数据
#添加数据,并规定数据的大小和位置
pl + theme(panel.background=element_rect(fill='transparent',
color ="gray"),
axis.text.x = element_text(angle = 70, hjust = 0.5,
vjust = 0.5,color = "black",size=9)) +
ylim(0,250) + #设置y轴取值范围
theme(panel.grid =element_blank()) + # 删去网格线
geom_text(mapping = aes(label = p$Freq),size=3,vjust=1.4)#添加数据,并规定数据的大小和位置,vjust值越大数据越往下,越小越往上
图例设置
通过guides(fill=FALSE)来移除图例
#去掉图例
pl + theme(panel.background=element_rect(fill='transparent',
color ="gray"),
axis.text.x = element_text(angle = 70, hjust = 0.5,
vjust = 0.5,color = "black",size=9)) +
ylim(0,250) + #设置y轴取值范围
theme(panel.grid =element_blank()) + # 删去网格线
geom_text(mapping = aes(label = p$Freq),size=3,vjust=1.4) + #添加数据,并规定数据的大小和位置
guides(fill=FALSE)
保存图
#可以利用RStudio直接保存
#可借助Cairo包进行保存为png、pdf等格式
require(Cairo)
CairoPNG("plot3.png")#单位为英寸
ggplot(data=p, aes(x=diqu, y=Freq,fill=diqu), fill=diqu) +
geom_bar(stat="identity")+
theme(panel.background=element_rect(fill='transparent',color ="gray"),#背景色设为透明,边框为灰色
#设定x轴坐标标签的文字方向,大小,颜色
axis.text.x = element_text(angle = 70, hjust = 0.5, vjust = 0.5,color = "black",size=9))+
ylim(0,250)+#设置y轴取值范围
theme(panel.grid =element_blank())+ ## 删去网格线
geom_text(mapping = aes(label = p$Freq),size=3,vjust=1.4)#添加数据,并规定数据的大小和位置
dev.off() #关闭图像设备,同时储存图片
保存中中文乱码解决
如果不能准确设置会出现如下图中中文乱码问题。
解决方法是,在CairoPNG(“plot.png”)中加入family设置,同时一定要注意把图例、坐标标签以及其他带中文的内容全部字体设置一致。
#可借助Cairo包进行保存为png、pdf等格式
require(Cairo)
CairoPNG("plot3.png",family="SimSun" )#单位为英寸,此处也可设置保存pdf格式CairoPDF("plot3.pdf",family="SimSun" )
ggplot(data=p, aes(x=diqu, y=Freq,fill=diqu), fill=diqu) +
geom_bar(stat="identity")+
theme(panel.background=element_rect(fill='transparent',color ="gray"),#背景色设为透明,边框为灰色
legend.text=element_text(family="SimSun"), #改变图例的字体
#设定x轴坐标标签的文字方向,大小,颜色
axis.text.x = element_text(angle = 70, hjust = 0.5, vjust = 0.5,family="SimSun",color = "black",size=9))+
ylim(0,250)+#设置y轴取值范围
theme(panel.grid =element_blank())+ ## 删去网格线
geom_text(mapping = aes(label = p$Freq),size=3,vjust=1.4)#添加数据,并规定数据的大小和位置
dev.off() #关闭图像设备,同时储存图片
其中family是各种字体,有如下参考:
字体 | family | 字体 | family |
---|---|---|---|
黑体 | SimHei | 楷体 | KaiTi |
新宋体 | NSimSun | 楷体_GB2312 | KaiTi_GB2312 |
仿宋 | FangSong | 微软正黑体 | Microsoft JhengHei |
仿宋_GB2312 | FangSong_GB2312 | 微软雅黑 | Microsoft YaHei |
幼圆 | YouYuan | 隶书 | LiSu |
华文细黑 | STXihei | 华文楷体 | STKaiti |
华文宋体 | STSong | 华文中宋 | STZhongsong |
华文仿宋 | STFangsong | 方正舒体 | FZShuTi |
方正姚体 | FZYaoti | 华文彩云 | STCaiyun |
华文琥珀 | STHupo | 华文隶书 | STLiti |
华文行楷 | STXingkai | 华文新魏 | STXinwei |
新细明体 | PMingLiU | 细明体 | MingLiU |
… | … | … | … |
http://blog.csdn.net/zx403413599/article/details/48581713 R语言ggplot之图例的设置
http://www.cnblogs.com/yangk/p/4760822.html R语言绘图高质量输出