ggplot:将轴设置为一定范围

D. *_*der 1 r ggplot2

我拼命尝试将比例范围设置为 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)

All*_*ron 5

可以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困惑,因此您可以将其放在itemy 轴、meanx 轴上,并坚持使用xlimincoord_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)

在此输入图像描述