R语言 绘制每边有两个Y轴和不同刻度的ggplot2图
有很多数据都有不止一个单位,如 温度、压力、人的高度 等。我们希望在一个基本图中使用一个以上的单位来表示这些数据,因为其他用户可能不熟悉你在图中提供的单位。这样他们就很难从图中进行分析。在这种情况下,我们需要在两个轴上有不同的刻度。因此,如果两个轴之间有比例关系,就可以使用双轴。这就是所谓的 缩放系数 。
例如,一个y轴上的距离可以是 英里 ,另一个轴上的距离可以是 公里 ,因为可能有一些人不习惯用 英里 来测量距离 。
在这篇文章中,我们将通过一个合适的例子来看看如何使用R编程语言中的ggplot2条形图在两边添加两个不同比例的垂直轴。
安装
首先,如果之前没有在R Studio中安装ggplot2包,你需要安装它。为了安装和加载,在R控制台中写下以下命令。
install.packages("ggplot2")
library(ggplot2)
创建条形图
为了创建一个简单的柱状图,我们将使用函数 geom_bar()
语法: geom_bar(stat, fill, color, width)
参数 :
- stat : 设置stat参数以确定模式。
- fill : 代表条形图内部的颜色。
- color : 代表条形图轮廓的颜色。
- width : 代表条形图的宽度。
例子: 考虑一个数据集,其中包括一个班级中五个不同学生的身高信息。数据集中给出的身高是以英尺为单位。因此,我们需要两个Y轴来表示使用 “英尺 “和 “厘米 “单位的高度 。
首先,我们创建一个数据框,其中有两个向量 “stud”,包含学生的ID和 “height”,包含学生的身高(英尺),并将其存储在一个变量 “height “中。
# Inserting data
height <- data.frame(stud=c("S-1","S-2","S-3",
"S-4","S-5"),
hght=c(4.7, 5.5, 4.9, 6.1,
6.4))
head(height)
输出
条形图
# Bar Plot
library(ggplot2)
plt <-ggplot(data=height, aes(x=stud, y=hght,fill=stud)) +
geom_bar(stat="identity")+
theme_classic()
plt
输出
在两边添加两个Y轴
由于缩放的问题,我们必须使用 ggplot2包中 的R函数 scale_y_continuous( ) 。另外,另一个函数 sec_axis( ) 被用来添加一个次要的轴并为其分配规格。语法是 :
sec_axis(trans,name,breaks,labels,guide)
我们需要的参数
trans : 需要转换的公式或函数。
name : 二级轴的名称。
现在,为了将英尺刻度转换为厘米刻度,我们需要比例系数。要转换,请使用:
1 feet = 30.48 cm
现在,在sec_axis( )内部的 trans 参数中使用上述比例因子值,并写出如下的转换公式。
# Making two Y axes
plt+scale_y_continuous(
"feet",sec.axis=sec_axis(~.*30.48,name="centi meter"))
输出