我需要绘制一个显示计数的条形图和一个显示平均值的折线图。所有这些都在一张带有多个y轴的图表中。
以下是数据框的示例:
df <- data.frame("YearMonth" = c(20141, 20142, 20143, 20144), "Count" = c(435, 355, 360, 318), "Average" = c(107, 85, 86, 74))
这怎么办?
非常感谢。
答案 0 :(得分:1)
{ggplot2} intentionally does not support this kind of multiple y-axes,因为人们普遍认为这是一个坏主意,因为它们会引起对数据的误解。参见例如Why not to use two axes, and what to use instead:
我们认为,具有两个不同y轴的图表使大多数人很难直观地对两个数据系列做出正确的陈述。我们强烈建议两种选择:使用两个图表代替一个图表,并使用索引图表。
{ggplot2}支持的唯一一种辅助y轴就是对主轴的缩放,请参见sec_axis
。这样的辅助轴不会遇到相同的问题,但是在您的情况下将不起作用:您想要的确实是{ggplot2}有意不支持的情况之一。
可以执行的操作是复制一个单一的y轴,并覆盖条形图和平均值(尽管尚不清楚条形图代表什么)这种情况):
# fix the `YearMonth` column:
df$YearMonth = lubridate::ymd(paste(sub('(.)$', '0\\1', as.character(df$YearMonth)),'01'))
ggplot(df) +
aes(YearMonth) +
geom_col(aes(y = Count)) +
geom_line(aes(y = Average), size = 2, color = 'lightblue') +
scale_y_continuous(sec.axis = dup_axis(name = NULL))