r - 重新调整ggplot中的水平轴
问题描述
我有一个简单的数据集,包含从 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 中。有没有其他更清晰的方法来做到这一点?谢谢!
解决方案
要以@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))
推荐阅读
- c - 影响 char 上的移位运算符
- python - 我找到了一个掩码检测程序,想知道是否可以用其他东西替换 tensorflow 库
- r - R 包开发 - 如何处理包安装时的 C 库链接错误
- javascript - 如何根据选中的单选按钮禁用某些复选框?
- postgresql - 'DISABLE TRIGGER ALL' 是否也会禁用 Postgres 中的域检查?
- javascript - 通过道具将功能从类组件编辑状态传递到基于功能的组件不起作用
- identityserver4 - IdentityServer4 Windows 身份验证缺少回调实现
- java - Kafka Consumer 中更好的错误处理方式
- javascript - 如何在 vue 中全局配置 vee-validate?
- firebase - 如何从 Firebase 存储中获取可公开访问的 URL?