奇怪的 ggplot 行为 - barplot 列无序且轴号不一致
Strange ggplot behaviour - barplot columns are unordered and axis numbers are inconsistent
我在使用 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() 创建一个相同的图形。
非常感谢。现在是星期五下午晚些时候,我很烦。
我使用了以下代码,使用您提供的示例数据,它对我来说工作正常。我所做的唯一更改是我已将您的年份转换为因子变量,而不是默认的数字或双精度变量。
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()
希望对您有所帮助。
我有同样的问题,但我的填充变量已经是一个因素。 Re-factoring 它或使用 forcats 什么也没做。
最后我发现,如果我将 fill
从 ggplot()
函数移动到 geom_bar()
它就起作用了:
# DOESN'T WORK
ggplot(data, aes(x = a, y = b, fill = c)) +
geom_col()
# DOES WORK
ggplot(data, aes(x = a, y = b)) +
geom_col(aes(fill = c)
因式分解 c 仍然是必要的。
我在使用 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() 创建一个相同的图形。
非常感谢。现在是星期五下午晚些时候,我很烦。
我使用了以下代码,使用您提供的示例数据,它对我来说工作正常。我所做的唯一更改是我已将您的年份转换为因子变量,而不是默认的数字或双精度变量。
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()
希望对您有所帮助。
我有同样的问题,但我的填充变量已经是一个因素。 Re-factoring 它或使用 forcats 什么也没做。
最后我发现,如果我将 fill
从 ggplot()
函数移动到 geom_bar()
它就起作用了:
# DOESN'T WORK
ggplot(data, aes(x = a, y = b, fill = c)) +
geom_col()
# DOES WORK
ggplot(data, aes(x = a, y = b)) +
geom_col(aes(fill = c)
因式分解 c 仍然是必要的。