2017-07-07 86 views
0

我想在R中的条形图中绘制数据集的两半。我想要的是数据集位于x轴的两侧而不是分层在轴的同一侧相互顶部。我的表目前看起来是这样的: enter image description here在R条形图中反转跨X轴的子图

当我希望它看起来像这样:enter image description here

这里是我的代码现在:

p <- ggplot(df_customer, aes(factor(income), percent_travel, fill = gender)) + 
    geom_bar(stat="identity", data = subset(df_customer, gender == "F")) + 
    geom_bar(stat="identity", data = subset(df_customer, gender == "M"), stackdir = "down") + 
    scale_x_discrete(name = "Annual Income ($1000's)", breaks=seq(-10, 100, 10)) + 
    scale_y_discrete(name = "Income Spent on Travel (%)", breaks=seq(0, 8, 2)) 
p 

我试图用stackdir,但我认为这是一个仅适用于散点图的属性。我可能能够通过使其中一个数据集中的所有值为负来得到我想要的结果,但它看起来不是理想的解决方案。

此外,任何想法,为什么我的Y轴规模没有显示出来?

谢谢!

+0

添加代表数据集将让你更有帮助的响应。 –

回答

1

这是一种方法。请注意,y是一个连续的尺度,而不是离散的。

p <- ggplot(df_customer, aes(x = as.factor(income), 
          y = percent_travel * ((-1)^(gender == "F")), 
          fill = gender)) + 
    geom_bar(stat = "identity") + 
    scale_x_discrete(name = "Annual Income ($1000's)") + 
    scale_y_continuous(name = "Income Spent on Travel (%)", breaks=seq(-8, 8, 2)) 
p 

enter image description here

+0

这工作完美,谢谢!有什么办法可以让x轴下方的y值显示为正值而不是负值?因为在技术上所有的数据都应该是正数,即使绘制在轴线下方 –

+0

您可以通过设置'scale_y_continuous'选项中'breaks'和'labels'的值来完成。看看'?scale_y_continuous' - 我没有尝试过,但看起来很有前途。 –