绘制带有日期和两个轴的条形图 - R ggplot2

时间:2021-02-03 12:50:46

标签: r ggplot2

请帮助指导绘制绘图的正确方法...

我有一个数据集,其中包含一些纪念碑以及它们被列为市政遗产的年份

<头>
纪念碑
A 1990
B 1990
C 1993
D 1995
E 1996

所有纪念碑都各不相同且独一无二,但也有一些共同点。

我想用所有年份来可视化 xx 轴,一个条形图,其中包含每年铭刻的纪念碑数量(甚至显示那些没有铭刻任何纪念碑的年份,以可视化时间间隔)

此外,如果有一个辅助轴,并用铭刻的纪念碑的累积总和画一条线,那就太棒了。

the final result would be something similar to this

提前致谢!

2 个答案:

答案 0 :(得分:1)

使用 ggplot2 中的辅助轴要记住的一般事情是 (1) 您需要自己转换输入数据,以及 (2) 您需要在辅助轴中指定逆变换。这是一个包含一些虚拟数据的示例,其中我们仅使用 10 的缩放因子。

library(ggplot2)

df <- data.frame(
  year = sample(1990:2020, 50, replace = TRUE)
)

scale <- 10 # scaling factor for secondary axis

ggplot(df, aes(year)) +
  geom_bar(width = 0.5) +
  geom_line(aes(y = after_stat(cumsum(count)/scale)),
            stat = "count", colour = "red") +
  scale_y_continuous(
    sec.axis = sec_axis(~ .x * scale, name = "cumulative count")
  )

reprex package (v1.0.0) 于 2021 年 2 月 3 日创建

也许还需要指出的是,您可以使用 aes(y = after_stat(cumsum(counts)) 获得每年的累计计数。

答案 1 :(得分:0)

所以我一直发现在 ggplot2 中创建辅助轴是不直观的(这是设计使然 - ggplot2 包作者不鼓励辅助轴,因为它们经常被误解)。但是,如果必须使用它们,echarts4r 包有一个简单的解决方案。

library(echarts4r)
library(dplyr)
library(zoo)

d <- data.frame(
  monument = c("A","B","C","D","E"),
  year = c(1990, 1990, 1993, 1995, 1996)) 

plot_dat <-
  data.frame(year = seq.int(min(d$year), max(d$year))) %>%
  left_join(d %>%
            group_by(year) %>%
            summarize(cnt = n()) %>%
            mutate(cum_cnt = cumsum(cnt))
  ) %>%
  mutate(year = paste(year),
         cum_cnt = na.locf(cum_cnt),
         show = T)
  

plot_dat %>%
  e_charts(year) %>%
  e_bar(cnt) %>%
  e_add("label", show) %>%
  e_line(cum_cnt, y_index = 1) %>% 
  e_hide_grid_lines("y")

上面的代码产生 this result。我做出了行政决定,只显示次轴的 y 轴网格线,因为条形很容易用标签进行注释。

感谢发布!我想要一个很好的借口来学习echarts4r