在ggplot中重新调整水平轴

时间:2019-07-16 20:24:10

标签: r ggplot2 geom-bar

我有一个简单的数据集,包含从0到1的值。当我绘制它时,水平轴自然为零。我希望该参考值为0.5,而低于0.5的柱线的反转和着色与低于此阈值的柱线不同。

my.df <- data.frame(group=state.name[1:20],col1 = runif(20))

p <- ggplot(my.df, aes(x=group,y=col1)) +
 geom_bar(stat="identity")+ylim(0,0.5)
我正在考虑将数据分解为两个,一个子集大于0.5,另一个子集大于0.5,然后在同一ggplot中将这两个子集进行某种程度的组合。还有其他更清晰的方法吗?谢谢!

2 个答案:

答案 0 :(得分:2)

要基于@jas_hughes的答案,您可以从col1变量中减去0.5,然后在y轴上重命名标签。

df <- data.frame(group=state.name[1:20],value=runif(20))

df %>% ggplot(aes(reorder(group,value),value-0.5)) + geom_bar(stat='identity') +
  scale_y_discrete(name='Value',
                   labels=c('0','0.5','1'),
                   limits=c(-0.5,0,0.5),
                   expand = c(-0.55, 0.55)) + 
  xlab('State') + 
  theme(axis.text.x = element_text(angle=45,hjust=1))

bar

答案 1 :(得分:0)

您要传达的y变量距离是0.5,因此您需要更改col1中的值以反映这一点。

library(dplyr)
library(ggplot)
my.df %>% 
  mutate(col2 = col1-0.5) %>% 
  ggplot() +
  aes(x = group, y = col2, fill = col2 >=0) + 
  geom_bar(stat = 'identity') + 
  theme(legend.position = 'none', 
        axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1)) + 
  ylab('Col1 above 0.5 (AU)')

sample plot

请注意,您还可以使用aes(fill = col1 >= 0.5)选项对条进行颜色编码而无需移动轴(如果col1包含百分比,这是我的建议)。