【问题标题】:Strange ggplot behaviour - barplot columns are unordered and axis numbers are inconsistent奇怪的 ggplot 行为 - 条形图列无序且轴数不一致
【发布时间】:2020-06-12 05:07:33
【问题描述】:

我在 RStudio 中遇到了一些奇怪的 ggplot 问题。这也不是第一次发生了。

我尝试创建一个 reprex,但无法重现下图中的行为。 (出于隐私考虑,我已将 y 轴标签设为空白)

这是代码:非常基本...

AED_screen_plot <- AED_num %>% 
  ggplot(aes(x = reorder(DHB,SCREENING.RATE), y = SCREENING.RATE, fill = AUDIT.YEAR)) +
  geom_bar(position = 'dodge', stat = 'identity') +
  ylab('Screening Rate (%)') +
  coord_flip()

print(AED_screen_plot)

由于我无法提供简单的表示,这里是数据...

data <- tibble('AUDIT.YEAR' = c(2019,2019,2019,2019,2019,2019,2019,2019,2019,2019,2019,2019,2019,2019,2019,2019,2019,2019,2019,2019,2018,2018,2018,2018,2018,2018,2018,2018,2018,2018,2018,2018,2018,2018,2018,2018,2018,2018,2018,2018), 'DHB' = c('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t'), 'SCREENING.RATE' = c(0,36,44,28,8,0,0,20,40,40,24,52,16,45,52,28,48,28,44,56,4,16,44,12,56,16,20,28,32,32,4,44,80,40,52,20,8,12,52,24))

我到底做错了什么???为什么条形颜色会互换?为什么 x 轴是蒙版的? (没有 coord_flip() 也会发生同样的事情。)是数据类型问题还是什么?我已经尝试将所有内容都转换为因子。取出 reorder() 会创建一个相同的图。

非常感谢。现在是星期五下午晚些时候,我被搞砸了。

【问题讨论】:

  • 条形图按从高到低的标准绘制。你试过给它下订单吗?也许是 group.orders。我最近解决了一个类似的问题。
  • 我可以在您的代码中看到一个问题,即您应该将 year 设为因子变量,如 fill = factor(AUDIT.YEAR)

标签: r ggplot2 bar-chart geom-bar


【解决方案1】:

我使用了以下代码,使用您提供的示例数据对我来说效果很好。我所做的唯一更改是我已将您的年份转换为因子变量,而不是默认数字或双精度。

library(tidyverse)

data <- tibble('AUDIT.YEAR' = c(2019,2019,2019,2019,2019,2019,2019,2019,2019,2019,2019,2019,2019,2019,2019,2019,2019,2019,2019,2019,2018,2018,2018,2018,2018,2018,2018,2018,2018,2018,2018,2018,2018,2018,2018,2018,2018,2018,2018,2018), 'DHB' = c('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t'), 'SCREENING.RATE' = c(0,36,44,28,8,0,0,20,40,40,24,52,16,45,52,28,48,28,44,56,4,16,44,12,56,16,20,28,32,32,4,44,80,40,52,20,8,12,52,24))

data %>% 
  ggplot(aes(x = reorder(DHB,SCREENING.RATE), y = SCREENING.RATE, fill = factor(AUDIT.YEAR))) +
  geom_bar(position = 'dodge', stat = 'identity') +
  ylab('Screening Rate (%)') + xlab("DHB")+
  labs(fill='Year') + coord_flip()

如果我使用这样的年份(数字或连续)变量,它将为您提供以下图

data %>% 
  ggplot(aes(x = reorder(DHB,SCREENING.RATE), y = SCREENING.RATE, fill = AUDIT.YEAR)) +
  geom_bar(position = 'dodge', stat = 'identity') +
  ylab('Screening Rate (%)') + xlab("DHB")+
  labs(fill='Year') + coord_flip()

希望对你有所帮助。

【讨论】:

    猜你喜欢
    • 2022-01-03
    • 1970-01-01
    • 1970-01-01
    • 2021-08-09
    • 1970-01-01
    • 2022-01-07
    • 2013-11-15
    • 2017-11-07
    • 2013-02-12
    相关资源
    最近更新 更多