我有这段代码可以在下面创建情节
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
但是,我不确定如何使辅助轴数据正确显示为绘图上的一条线?例如,何时尝试:
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的数据长度不同有关,但我不确定如何解决。
答案 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)
它回答了您的问题吗?