奇怪的ggplot行为--柱状图列没有排序,轴数不一致。

问题描述 投票:0回答:1

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

我嘗試建立一個reprex,但無法重現下圖中的行為。(为了保护隐私,我把Y轴的标签涂掉了)

https:/i.stack.imgur.com5fFVi.png。

这是代码:很基本的... ...

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)

因为我不能提供一个简单的reprex,这是数据...

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()后,会产生一个相同的图形。

非常感谢。现在是周五下午晚些时候,我被搞得很烦。

r ggplot2 bar-chart geom-bar
1个回答
0
投票

我使用了下面的代码,使用您提供的示例数据,它工作得很好。我所做的唯一改变是,我将你的年份转换为一个因子变量,而不是默认的数字或双数。

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()

enter image description here如果我使用年份作为变量(数值或连续),它将会给你以下的图表

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()

enter image description here

希望对你有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.