r - 将辅助轴添加到堆叠条形图

标签 r ggplot2

我有这段代码可以创建下面的图

sec_axis_data <- mpg %>%
  group_by(manufacturer) %>%
  summarise(entries = n())

p <- ggplot(mpg, aes(x = manufacturer, fill = class == "compact")) +
  geom_bar(position = "fill") +
  scale_fill_manual(values = c('blue', 'red')) +
  scale_y_continuous(sec.axis = sec_axis(~. * 50))
p

enter image description here

但是,我不确定如何使辅助轴数据正确显示为穿过绘图的线?例如,当我尝试:

p <- ggplot(mpg, aes(x = manufacturer, fill = class == "compact")) +
  geom_bar(position = "fill") +
  scale_fill_manual(values = c('blue', 'red')) +
  scale_y_continuous(sec.axis = sec_axis(~. * 50)) +
  geom_line(data = sec_axis_data, aes(x = manufacturer, y = entries))
p

...我收到错误。我认为该问题与 mpg 和 sec_axis_data 的数据长度不同有关,但我不确定如何解决此问题。

最佳答案

您已经非常接近解决方案了。

您需要添加 inherit.aes = FALSE 因为在您的第二个数据帧中找不到 fill 参数。

此外,要设置适当的值,您需要将“条目”值除以与在 sec.axis 函数中构建第二个轴相同的比率:

library(ggplot2)

ggplot(mpg, aes(x = manufacturer, fill = class == "compact")) +
  geom_bar(position = "fill", alpha = 0.5) +
  scale_fill_manual(values = c('blue', 'red')) +
  scale_y_continuous(sec.axis = sec_axis(~. * 50, name = "Second axis")) +
  geom_line(inherit.aes = FALSE, data = sec_axis_data, 
            aes(x = manufacturer, y = entries/50, group = 1), size = 2)

enter image description here

它能回答你的问题吗?

关于r - 将辅助轴添加到堆叠条形图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61243063/

相关文章:

r - ggplot : “Error in grid.Call(” L_textBounds“, as.graphicsAnnot(x$label), x$x, x$y, … 中出现错误问题”

r - tidyverse/stringr 如何查找和替换完全匹配的内容

r - 如何删除R中数据帧列中的部分字符串?

r - 在 R 中制作 WCS Munsell 颜色图表,scale_fill_manual,ggplot2 中的顺序问题

r - 如何用R创建时间散点图?

sql - 在 dbplyr 管道中使用类似 grepl 的字符串匹配

r - 如何在ggplot中将轴值强制为科学计数法

r - 为什么这段代码在 ggplot 中静态地获取 y 轴百分比不正确?

r - 如何测量R/ggplot2中2条分布曲线之间的面积

r - 使用 R 进行股票分析的回溯测试