【问题标题】:Using stacked barplots in ggplot2 results in wrong axis在 ggplot2 中使用堆叠的条形图会导致轴错误
【发布时间】:2019-08-19 03:41:53
【问题描述】:

我使用tidyr创建了一个新数据集:

 library(tidyverse)
 ##Create some fake data
 set.seed(3)
 data <- tibble(
      year = 1991:2020,
      One = 11:40,
      Two = 31:60,
      Three = 61:90,   
 )

 ##Gather the variables to create a long dataset
 new_data <- data %>%
 gather(model, value, -year)

 ##plot the data
 ggplot(new_data, aes(x = year, y = value, fill=model)) + 
 geom_bar(stat = "identity",position = "stack")+
 geom_rangeframe() + 
 theme_tufte()  

问题是y轴的长度不正确:

在代码中添加 facet_grid:

 # facet_grid(~model)

我也试过添加

 scale_y_continuous(limits = c(0, 150))

但是没有用。

我还尝试添加一个假数据集,其中包含我的真实数据的最小值到最大值:

 data2 <- tibble(
 year = 1991:2020,    
 bmsum = dummy = c(11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,90)
 )
 new_data2 <- data2 %>%
 gather(model, value, -year)
 ggplot(new_data, aes(x = year, y = value, fill=model)) + 
 geom_bar(stat = "identity",position = "stack")+
 geom_rangeframe(data=new_data2) + 
 facet_grid(~model)+
 theme_pubclean()   

【问题讨论】:

    标签: r ggplot2 tidyr


    【解决方案1】:

    轴没有问题,这与堆积图无关。您正在使用ggthemes::geom_rangeframe(),如果您查看描述,则会创建:

    延伸到绘制数据的最大值和最小值的轴线。

    如果您不想要这些,请不要使用它们。您对theme_tufte() 的调用正在删除背景中断,使其看起来像没有轴。

    您可以在您的 theme_tufte() 调用之后通过使用 axis.line 参数添加另一个对 theme() 的调用来将这些行放回:

    ggplot(new_data, aes(x = year, y = value, fill = model)) + 
        geom_bar(stat = "identity", position = "stack")+
        theme_tufte() + 
        theme(axis.line = element_line(color = "black", size = 1))
    

    【讨论】:

    • 谢谢。删除 rangeframe() 导致没有轴。有没有一种简单的方法来使用 theme_tufte() 并完全打印轴?
    • 你知道如何像在 tufte 中那样重新创建 x 轴和 y 轴交叉点之间的小间隙吗?
    • 不确定你的意思。您不希望 x 轴和 y 轴相遇吗?
    • 是的,正确。在 tufte_theme 轴源处有一个间隙
    • 我认为您没有理解我的回答。 tufte_theme 中没有坐标轴。你以为的坐标轴不过是geom_rangeframe画的线。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-04
    • 2014-08-30
    • 2021-01-20
    • 1970-01-01
    • 2011-08-21
    相关资源
    最近更新 更多