R语言ggplot2条形图详解

本文内容来自个人做案例过程中遇到的一些问题,一是用普通的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楷体_GB2312KaiTi_GB2312
仿宋FangSong微软正黑体Microsoft JhengHei
仿宋_GB2312FangSong_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语言绘图高质量输出

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值