我拼命尝试将比例范围设置为 1 到 5。我试图使用ylim()
,scale_y_continuous(breaks = seq(1,5,1))
和coord_cartesian(ylim=c(1,5))
。如何才能做到这一点?感谢帮助!
n <- 10000
test <- data.frame(value = sample(1:5, size = n, replace = TRUE),
grp = sample(c("A", "B", "C"), size = n, replace = TRUE),
item = sample(c("Item1", "Item2", "Item3", "Item4", "Item5", "Item6"), size = n, replace = TRUE))
test %>%
group_by(item, grp) %>%
summarise(mean = mean(value, na.rm=TRUE)) %>%
ungroup() %>%
ggplot(aes(x = item, y = mean, group = grp, fill = grp)) +
geom_col(position = 'dodge') +
coord_cartesian(ylim=c(1, 5)) +
coord_flip()
Run Code Online (Sandbox Code Playgroud)
你可以把ylim
里面coord_flip
test %>%
group_by(item, grp) %>%
summarise(mean = mean(value, na.rm=TRUE)) %>%
ungroup() %>%
ggplot(aes(x = item, y = mean, group = grp, fill = grp)) +
geom_col(position = 'dodge') +
coord_flip(ylim = c(1, 5))
Run Code Online (Sandbox Code Playgroud)
更好的是,根本不使用。coord_flip
如果您有分类 y 轴和数字 x 轴,则默认行为geom_col
是使条形保持水平。在应用比例和主题时,我总是感到coord_flip
困惑,因此您可以将其放在item
y 轴、mean
x 轴上,并坚持使用xlim
incoord_cartesian
来代替:
test %>%
group_by(item, grp) %>%
summarise(mean = mean(value, na.rm=TRUE)) %>%
ungroup() %>%
ggplot(aes(x = mean, y = item, fill = grp)) +
geom_col(position = 'dodge') +
coord_cartesian(xlim = c(1, 5))
Run Code Online (Sandbox Code Playgroud)
更好的是使用stat = "summary"
inside geom_bar
,所以你根本不需要总结你的数据框:
ggplot(test, aes(x = value, y = item, fill = grp)) +
geom_bar(stat = 'summary', position = 'dodge') +
coord_cartesian(xlim = c(1, 5))
Run Code Online (Sandbox Code Playgroud)