R语言 ggplot2中结合条形图和线形图

R语言 ggplot2中结合条形图和线形图

有时在处理分层数据时,我们需要将两个或更多的不同类型的图表组合成一个图表,以便更好地进行可视化和分析。这些被称为 “组合图”。在这篇文章中,我们将看到如何使用ggplot2在R编程语言中结合柱状图和折线图。

使用的数据集: 售出课程与注册学生的对比

年份 出售的课程 注册学生的百分比
2014 35 30%
2015 30 25%
2016 40 30%
2017 25 50%
2018 30 40%
2019 35 20%
2020 65 60%

为了在R中绘制条形图,我们使用函数 geom_bar( )

语法

geom_bar(stat, fill, color, width)

参数 :

  • stat : 设置stat参数以确定模式。
  • fill : 代表条形图内部的颜色。
  • color : 代表条形图轮廓的颜色。
  • width(宽度)。代表条形图的宽度。

另外,使用函数 geom_line( ) 可以绘制线图。

语法

geom_line(mapping=NULL, data=NULL, stat="identity", position="identity", ...)

例子

# Entering data
year <- c(2014, 2015, 2016, 2017, 2018, 2019,2020)
course <- c(35, 30, 40, 25, 30, 35, 65)
penroll <- c(0.3, 0.25, 0.3, 0.5, 0.4, 0.2, 0.6)
  
# Creating Data Frame
perf <- data.frame(year, course, penroll)
head(perf)
  
# Plotting Multiple Charts
library(ggplot2)
  
ggplot(perf)  + 
  geom_bar(aes(x=year, y=course),stat="identity", fill="cyan",colour="#006000")+
  geom_line(aes(x=year, y=penroll),stat="identity",color="red")+
  labs(title= "Courses vs Students Enrolled in GeeksforGeeks",
       x="Year",y="Number of Courses Sold")

输出

在R语言的ggplot2中结合条形图和线形图

在上面的图表中,我们可以观察到柱状图的形状和预期的一样,但线状图只是可见。这是由于缩放因素造成的,因为线图是以小数形式表示的学生百分比,而当前的纵轴有很大的数值。因此,我们需要一个次要的轴,以便在同一图表区域内正确地绘制直线。

由于缩放的问题,我们必须使用ggplot2包中的R函数scale_y_continuous( )。另外,另一个函数 sec_axis( ) 被用来添加一个次要的轴,并将规格分配给它。

语法

sec_axis(trans,name,break,labels,guide)

参数:

  • trans : 需要进行转换的公式或函数。
  • name : 二级轴的名称。

由于我们要处理的是二级Y轴,所以我们需要在 scale_y_continuous( ) 中写下这个命令。

语法

scale_y_continuous(name,labs,position,sec.axis,limit,break)

在处理二级轴的时候,缩放系数是最棘手的部分。由于二级轴需要以百分比为单位,我们必须使用 0.01的比例系数 ,并在 sec_axis( ) 的trans参数中写入转换公式 如果你在公式中使用了0.01的比例,你也必须在 geom_line( ) 中把同一轴乘以100,以使比例平衡。

例子

# Entering data
year <- c(2014, 2015, 2016, 2017, 2018, 2019,2020)
course <- c(35, 30, 40, 25, 30, 35, 65)
penroll <- c(0.3, 0.25, 0.3, 0.5, 0.4, 0.2, 0.6)
  
# Creating Data Frame
perf <- data.frame(year, course, penroll)
  
# Plotting Charts and adding a secondary axis
library(ggplot2)
ggp <- ggplot(perf)  + 
  geom_bar(aes(x=year, y=course),stat="identity", fill="cyan",colour="#006000")+
  geom_line(aes(x=year, y=100*penroll),stat="identity",color="red",size=2)+
  labs(title= "Courses vs Students Enrolled in GeeksforGeeks",
       x="Year",y="Number of Courses Sold")+
  scale_y_continuous(sec.axis=sec_axis(~.*0.01,name="Percentage"))
ggp

输出

在R语言的ggplot2中结合条形图和线形图

正如我们在上面看到的那样,添加的二级轴将是分数值的形式。但我们需要的是百分比形式的二级轴。为了转换为百分比,我们必须使用 sec_axis( ) 里面的参数标签。

使用的一些重要的关键字是 。

  • scale: 它用于缩放数据。一个比例系数乘以原始数据值。
  • labels : 它用于分配标签。

使用的函数是 scale_y_continuous( ) ,它是ggplot2库中 “y-aesthetics “的一个默认比例。由于我们需要在Y轴的标签中加入 “百分比”,所以使用了关键词 “标签 “。

现在使用下面的命令,将Y轴的标签转换成百分比。

scales : : percent

这将简单地把Y轴的数据从十进制转换成百分比。它将现值乘以100。缩放系数是100。

例子

# Entering data
year <- c(2014, 2015, 2016, 2017, 2018, 2019,2020)
course <- c(35, 30, 40, 25, 30, 35, 65)
penroll <- c(0.3, 0.25, 0.3, 0.5, 0.4, 0.2, 0.6)
  
# Creating Data Frame
perf <- data.frame(year, course, penroll)
  
# Plotting Multiple Charts and changing 
# secondary axis to percentage
library(ggplot2)
ggp <- ggplot(perf)  + 
  geom_bar(aes(x=year, y=course),stat="identity", fill="cyan",colour="#006000")+
  geom_line(aes(x=year, y=100*penroll),stat="identity",color="red",size=2)+
  labs(title= "Courses vs Students Enrolled in GeeksforGeeks",
       x="Year",y="Number of Courses Sold")+
  scale_y_continuous(sec.axis=sec_axis(
    ~.*0.01,name="Percentage of Students Enrolled", labels=scales::percent))
ggp

输出

在R语言的ggplot2中结合条形图和线形图

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程