将辅助轴添加到堆叠的条形图中

时间:2020-04-16 05:08:58

标签: 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的数据长度不同有关,但我不确定如何解决。

1 个答案:

答案 0 :(得分:1)

您已经很接近解决方案了。

由于在第二个数据框中找不到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

它回答了您的问题吗?