绘制两列数据,其中一列在ggplot中具有相反的y比例

时间:2019-01-31 21:21:07

标签: r ggplot2

假设我有一个包含3列的数据框:

n value1 value2
1  2       8      
2  4       6
3  6       4
4  8       2

我想按以下方式绘制它们。对于每n个,在值y​​的正y刻度和值2的反向y刻度上制作一个小节:

Example of what I want

这应该是方面兼容的(因为实际上还有2列)。

这是我到目前为止所管理的

p = data %>%
  ggplot() +
  geom_bar(aes(x = as.factor(n), y = value1),stat="identity",position="dodge") +
  geom_bar(aes(x = as.factor(n), y = value2),stat="identity",position="dodge") + scale_y_reverse() +      
  facet_grid(A ~ B) +
  ylab("value 1/2") +
  xlab("number")    
show(p)

2 个答案:

答案 0 :(得分:1)

这有效:

library(ggplot2)

ggplot(data, aes(x = factor(n))) +
  geom_col(aes(y = value1, fill = "Value 1")) +
  geom_col(aes(y = -value2, fill = "Value 2")) +  
  ylab("value 1/2") +
  xlab("number")   

答案 1 :(得分:0)

您无法在ggplot2中的次要y轴上绘制值的子集,因为它为误导的可视化打开了闸门。 ggplot2中的辅助y轴选项可让您有条件地显示辅助y轴,该条件是对主要的线性变换。

但是,您的情况很简单:向下的条形就是您的value2乘以-1:

df %>% mutate(value2=value2*-1) %>% gather(stat, val, value1, value2) %>% ggplot(aes(x=as.factor(n), y=val, fill=stat)) + geom_col()