R語言ggplot2條形圖詳解
阿新 • • 發佈:2019-01-26
本文內容來自個人做案例過程中遇到的一些問題,一是用普通的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 |
… | … | … | … |