用条形图和线图以及两个y轴绘制

时间:2019-03-07 15:04:08

标签: r ggplot2 axes

我需要绘制一个显示计数的条形图和一个显示平均值的折线图。所有这些都在一张带有多个y轴的图表中。

以下是数据框的示例:

df <- data.frame("YearMonth" = c(20141, 20142, 20143, 20144), "Count" = c(435, 355, 360, 318), "Average" = c(107, 85, 86, 74))

这怎么办?

非常感谢。

1 个答案:

答案 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))

dual y-axis