我有一个简单的数据集,包含从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中将这两个子集进行某种程度的组合。还有其他更清晰的方法吗?谢谢!
答案 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))
答案 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)')
请注意,您还可以使用aes(fill = col1 >= 0.5)
选项对条进行颜色编码而无需移动轴(如果col1包含百分比,这是我的建议)。