网友提问——柱状图+颜色映射+组图怎么实现?R语言来帮你

背景介绍

今天有一位网友问,下面这张图如何做?仔细一看,其实就是三张柱状图,将需要的数值映射到颜色上即可!

下来我们使用R语言来绘制一下!

软件介绍

[软件]:R (4.1.2)

[软件]:RStudio (Version 1.4.1106)

绘图教程

1.加载需要的R包,没有安装的使用install.packages( )安装一下

library(tidyverse) #数据处理+绘图
library(openxlsx)   #打开excel文件
library(ggpubr)    #组图

2.这是我们的数据,三组

Province1

Mt CO2/y

GDP per capita (¥per person)

Province2

g CO2/¥GDP

GDP per capita (¥per person)

Province3

t CO2/person/y

GDP per capita (¥per person)

Tianjin

191

90

Henan

117

85

Heilongjiang

7.7

43

Hebei

120

75

Hebei

45

78

Hebei

1.6

82

Shanxi

102

68

Hubei

84

54

Guangxi

2.8

64

Anhui

48

56

Anhui

28

69

Anhui

0.8

22

Ningxia

44

43

Shannxi

189

53

Zhejiang

6.9

51

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语言绘图很麻烦,但确实熟悉了之后很方便。而且,对于复杂图形,更适合)。

举报
评论 0