R-在同一图表上创建条形和折线,如何添加第二个y轴

用户名

我正在尝试创建一个ggplot2图,该图显示相互重叠的条形图和折线图。在excel中,这可以通过添加第二个轴来完成。

x轴表示产品类型,条形图的y值应表示收入,而我想将利润率表示为百分比的折线图。折线图和条形图的值应彼此独立,即不存在这种关系。

require(ggplot2)    
df <- data.frame(x = c(1:5), y = abs(rnorm(5)*100))
df$y2 <- abs(rnorm(5))

ggplot(df, mapping= aes(x=as.factor(`x`), y = `y`)) + 
  geom_col(aes(x=as.factor(`x`), y = `y`),fill = 'blue')+
  geom_line(mapping= aes(x=as.factor(`x`), y = `y`),group=1) +
  geom_label(aes(label= round(y2,2))) +
  scale_y_continuous() +
  theme_bw() + 
  theme(axis.text.x = element_text(angle = 20,hjust=1)) 

在此处输入图片说明

上面的图像几乎产生了我想要的。但是,缩放比例不正确-我需要按幅度对1.38和0.23值进行排序,即点0.23应该显示在1.38以下。我也不确定如何在右侧添加另一个轴。

瓦伦丁

随着2.2.0版本开始ggplot2,就可以增加一个辅助轴-看到这个详细的演示。另外,一些已经用这种方法回答了问题:这里这里这里这里关于在此处添加第二个OY轴的有趣讨论

主要思想是需要为第二个OY轴应用转换。在下面的示例中,转换因子是每个OY轴的最大值之间的比率。

# Prepare data
library(ggplot2)
set.seed(2018)
df <- data.frame(x = c(1:5), y = abs(rnorm(5)*100))
df$y2 <- abs(rnorm(5))

# The transformation factor
transf_fact <- max(df$y)/max(df$y2)

# Plot
ggplot(data = df,
       mapping = aes(x = as.factor(x),
                     y = y)) +
  geom_col(fill = 'blue') +
  # Apply the factor on values appearing on second OY axis
  geom_line(aes(y = transf_fact * y2), group = 1) +
  # Add second OY axis; note the transformation back (division)
  scale_y_continuous(sec.axis = sec_axis(trans = ~ . / transf_fact, 
                                         name = "Second axis")) +
  geom_label(aes(y = transf_fact * y2,
                 label = round(y2, 2))) +
  theme_bw() + 
  theme(axis.text.x = element_text(angle = 20, hjust = 1))

在此处输入图片说明

但是,如果您特别希望一对一转换,例如说Y1的值100应该对应于Y2的值1(200到2,依此类推),然后将转换(乘法)因子更改为100( 100/1):transf_fact <- 100/1您得到了:

在此处输入图片说明

的优点transf_fact <- max(df$y)/max(df$y2)是,当使用两个不同的比例尺时以最佳方式使用绘图区域-尝试类似的方法transf_fact <- 1000/1,我想您会明白的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在R中的折线图中添加第二个x轴

在R中添加第二个y轴

R绘图图中的第二个Y轴

如何在R的同一图上创建具有不同x和y轴的两个条形图?

R根据变量重新缩放第二个Y轴

R如何为矩阵添加第二个标签

igraph R | 如何为每个节点添加第二个内部圆?

如何在R中的点图中添加第二个数据集?

如何使用 R 中第一个 data.frame 的信息将第二个 data.frame 的标题用作线图的轴?

如何在 R 上的 ggplot 中显示第二个变量

如何删除R中一行中值的第二个实例

在ggplotly上添加第二个Y轴

在 r 中使用 sub 分别用“_”和“:”替换第一个和第二个“-”

如何在 R 中创建一个条形图,y 轴上的频率不是密度?

Google图表中堆叠的(正/负)条形图中的第二个Y轴

如何使用 Altair 在分组条形图上添加第二个 Y 轴?并使用数据中一列的值对条形进行排序

如何在R中的栅格堆栈中找到第二个最大值和相应的图层名称

添加列并从第二个数据框R中插入信息

在 R 中的第二个数字后添加逗号

添加与第一个y轴相关的第二个y轴

替换R中第一个出现的“:”,而不是第二个

基于 R 中的第二个列表在一个列表中求和词频

而 read -r 删除第二个“\”

避免在R中的大型数据集上使用循环,而在重复数据上添加第二个循环

如何在此mySlides div中添加第二个.r2动画类,以显示下一个或上一个幻灯片

如何获得R中向量的倒数第二个元素

如何用R中的第二个变量范围除变量的每个范围

如何创建一个表,该表的第一个表中的行也与R中第二个表的行中的3列匹配

需要在 R 中的同一图表上绘制两个折线图