【问题标题】:Draw a bar plot with date and two axis - R ggplot2用日期和两个轴绘制条形图 - R ggplot2
【发布时间】:2021-05-07 17:01:16
【问题描述】:

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

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

monument year
A 1990
B 1990
C 1993
D 1995
E 1996

所有的纪念碑都是不同的和独特的,但有些年份是相同的。

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

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

the final result would be something similar to this

提前致谢!

【问题讨论】:

    标签: r ggplot2


    【解决方案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)) 获得每年的累积计数。

    【讨论】:

      【解决方案2】:

      所以我总是发现在 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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-27
        • 2019-07-29
        • 1970-01-01
        • 2023-03-31
        相关资源
        最近更新 更多