【问题标题】:Stacked barplot crossing the x-axis [duplicate]穿过 x 轴的堆积条形图 [重复]
【发布时间】:2014-03-06 21:40:19
【问题描述】:

朋友们, 如何在 x 轴的两侧(最好在 ggplot2 中)创建堆叠条形图?

示例: http://s23.postimg.org/3lbgicb3f/Example.png

我四处搜寻,但找不到任何好的例子。 数据包含两个位置(1 和 2),具有 5 个不同类别(A、B、C、R 和 S)的值(权重)。 A、B 和 C 应位于 x 轴的顶部,而 R 和 S 应绘制在下方。注意 x 轴两侧的正值。不要介意错误栏。

示例数据:

Type=c("A","B","C","R","S","A","B","C","R","S")
Location=c(1,1,1,1,1,2,2,2,2,2)
Value=c(2,6,5,3,2.5,6,3,2,4,1.5)
df=data.frame(Type, Location, Value)
df$Location <- as.factor(df$Location)

任何指针将不胜感激, 诺登斯基德

【问题讨论】:

    标签: r ggplot2 bar-chart


    【解决方案1】:

    这是另一种与@BrodieG 非常相似的方法,它不需要创建任何新的数据框。

    library(plyr)
    library(ggplot2)
    ggplot(df, aes(x=Location, fill=Type))+
      geom_bar(subset=.(Type %in% c("A","B","C")), aes(y=Value))+
      geom_bar(subset=.(Type %in% c("R","S")), aes(y=-Value))+
      geom_hline(yintercept=0, linetype=2)+
      scale_y_continuous(labels=abs)
    

    【讨论】:

    • + 1 表示subset 位。我隐约记得在某个地方看到过这个文件,但不知道在哪里。另外,在你之后 +1 感觉有点傻,并且会在另一篇文章中这样做,除了过度绘制,所以这是一个感谢你教我新东西的好地方。
    • 太好了,这正是我想要的。非常感谢!
    • @Nordenskiold,如果您的问题得到解答,请考虑将其中一个答案标记为答案。谢谢。
    【解决方案2】:

    你可以试试:

    df <- transform(df, Value=ifelse(as.character(Type) %in% c("R", "S"), -Value, Value))
    df.split <- split(df, df$Value < 0)
    
    ggplot() + 
      geom_bar(data=df.split[[1]], aes(x=Location, y=Value, fill=Type), stat="identity") +
      geom_bar(data=df.split[[2]], aes(x=Location, y=Value, fill=Type), stat="identity") +
      geom_hline(yintercept=0) +
      scale_y_continuous(labels=abs)
    

    这里我们需要将数据框拆分为正值和负值,然后我们使用scale_y_continouslabel 参数使y 轴上的所有值都为正值。

    【讨论】:

    • 非常感谢您的帮助。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2012-12-25
    • 1970-01-01
    • 2017-03-06
    • 1970-01-01
    • 1970-01-01
    • 2019-07-15
    • 1970-01-01
    • 2020-08-30
    相关资源
    最近更新 更多