背景介紹
今天有一位網友問,下面這張圖如何做?仔細一看,其實就是三張柱狀圖,將需要的數值映射到顏色上即可!
下來我們使用R語言來繪製一下!
軟件介紹
[軟件]:R (4.1.2)
[軟件]:RStudio (Version 1.4.1106)
繪圖教程
1.加載需要的R包,沒有安裝的使用install.packages( )安裝一下
library(tidyverse) #數據處理+繪圖library(openxlsx) #打開excel文件library(ggpubr) #組圖
2.這是我們的數據,三組
Province1Mt CO2/yGDP per capita (¥per person)Province2g CO2/¥GDPGDP per capita (¥per person)Province3t CO2/person/yGDP per capita (¥per person)Tianjin19190Henan11785Heilongjiang7.743Hebei12075Hebei4578Hebei1.682Shanxi10268Hubei8454Guangxi2.864Anhui4856Anhui2869Anhui0.822Ningxia4443Shannxi18953Zhejiang6.951
3.將數據放在R的文件夾下,然後讀取數據進入RStudio中,輸入代碼
data <- read.xlsx("D:\\R\\document\\Case.xlsx")
5.調用字體,提取數據,繪圖
windowsFonts用來進行提取系統字體,你可以將Times New Roman換成其他的也行
因為第一組數據是前三列,所以我們提取數據框的數據,並data[,(1:3)]賦值給data1
接下來就是繪圖,將第一列名稱作為x,第二列數值作為y,第三列數值進行顏色映射
由於變量中間有空格,因此使用兩個 `
coord_flip()函數是將x和y軸進行一個翻轉
labs()函數中,可以更改x和y坐標軸的名稱
geom_text(),是為了給柱子上添加標籤,並且對標籤的字體,大小,位置進行設置
scale_fill_gradient()函數是對映射的顏色進行設置,這裡使用綠色和紅色
scale_y_continuous()函數中,limits是為了對坐標軸的範圍進行限制,breaks是為了將坐標軸的標籤進行設置
theme是為了對圖形主題進行設置
# 調用字體windowsFonts(A=windowsFont("Times New Roman"))# 第一張圖的數據data1 <- data[,(1:3)]# 第一張圖繪圖f1 <- ggplot(data1,aes(`Province1`,`Mt CO2/y`, fill=`GDP per capita (¥per person)`))+ geom_col()+ coord_flip()+ labs(x="Province1",y="Mt CO2/y")+ geom_text(aes(label=`Mt CO2/y`),size=5,hjust=-.1,family="A")+ scale_fill_gradient(low = "green",high="red")+ scale_y_continuous(limits = c(0,250),breaks = seq(0,250,50))+ theme(text = element_text("A",size = 15,face = "bold"))
6.然後將第二張和第三張圖進行繪製
# 第二張圖的數據data2 <- data[,(4:6)]# 第二張圖繪圖f2 <- ggplot(data2,aes(`Province2`,`g CO2/¥GDP`, fill=`GDP per capita (¥per person)`))+ geom_col()+ coord_flip()+ labs(x="Province2",y="g CO2/¥GDP")+ geom_text(aes(label=`g CO2/¥GDP`),size=5,hjust=-.1,family="A")+ scale_fill_gradient(low = "green",high="red")+ scale_y_continuous(limits = c(0,250),breaks = seq(0,250,50))+ theme(text = element_text("A",size = 15,face = "bold"))# 第三張圖的數據data3 <- data[,(7:9)]# 第三張圖繪圖f3 <- ggplot(data3,aes(`Province3`,`t CO2/person/y`, fill=`GDP per capita (¥per person)`))+ geom_col()+ coord_flip()+ labs(x="Province2",y="t CO2/person/y")+ geom_text(aes(label=`t CO2/person/y`),size=5,hjust=-.1,family="A")+ scale_fill_gradient(low = "green",high="red")+ scale_y_continuous(limits = c(0,10),breaks = seq(0,10,2))+ theme(text = element_text("A",size = 15,face = "bold"))
7.最後,我們對三張圖進行組圖即可
labels是為了給圖加上標籤,不想要直接刪除代碼即可
font.label是為了對a,b,c的字體格式進行設置
ncol是將圖形按照三列排列
common.legend是為了將三個圖的圖例進行合併。(圖例相同的時候可以合併)
legend = "bottom"是為了將圖例的位置進行調整,你也可以放在其他位置,如("top", "bottom", "left", "right", "none")
ggarrange(f1,f2,f3, labels = c("a","b","c"), font.label = list(family="A",size=20), ncol=3, common.legend = TRUE, legend = "bottom")
8.趕緊來學習一下吧!(代碼雖多,但卻很好理解。雖然R語言繪圖很麻煩,但確實熟悉了之後很方便。而且,對於複雜圖形,更適合)。