【问题标题】:barplot with 3 variables (continous X and Y and third stacked variable)具有 3 个变量的条形图(连续 X 和 Y 以及第三个堆叠变量)
【发布时间】:2013-01-08 12:46:02
【问题描述】:

我有一些这样的数据:

myd <- structure(list(var1 = structure(1:4, .Label = c("II", "III", 
       "IV", "V"), class = "factor"), zero_co = c(15.15152, 3.030303, 
        0, 0), non_zero_CO = c(84.84848, 96.969697, 100, 100), size = c(230, 
        813, 317, 1532)), .Names = c("var1", "zero_co", "non_zero_CO", 
        "size"), row.names = c(NA, -4L), class = "data.frame")

# myd
# I                   II         III   IV     V  
# zero_co       15.15152    3.030303    0     0
# non-zero CO   84.84848   96.969697  100   100
# size         230.00000  813.000000  317  1532

我想在 y 轴上绘制 size,在 x 轴上绘制其他两个变量 zero_conon-zero CO 作为堆叠条形图。我正在尝试使用gplotsggplots 绘制此图,但发现困难。我如何绘制这个?

【问题讨论】:

  • 您的数据绝对不可读。了解如何在 R 中制作可重现的示例:stackoverflow.com/q/5963269/684229
  • 对不起..我现在已经编辑了。
  • 你能证明你做了什么吗?
  • 基本上我试过关注这个帖子:stackoverflow.com/questions/6999144/…
  • 我的意思是你自己的代码是什么(从帖子中采用)和错误信息,如果你有任何!

标签: r plot ggplot2 visualization


【解决方案1】:

如果我理解正确,这是一个解决方案。由于您在 x 和 y 轴上都有定量变量,因此您不能使用条形图。您需要使用矩形(无论如何看起来像条)。

myd <- data.frame (var1 = c("II", "III", "IV", "V"), zero_co = c(15.15152 , 3.030303,    0,     0),
             non_zero_CO = c(84.84848,   96.969697,  100,   100),
              size = c(230.00000,  813.000000,  317,  1532))

    require(ggplot2)

ggplot(myd) + geom_rect(aes(xmin = 0, xmax = zero_co, ymin =size , ymax =size + 80 ), fill = "lightgreen") +
geom_rect(aes(xmin = zero_co, xmax = zero_co + non_zero_CO, ymin =size , ymax =size + 80 ), fill = "darkblue") + theme_bw()

给你剧情:

【讨论】:

  • @poison Alien 你能确认这是否是你要找的吗?
  • 嗨,乔恩 - 感谢您的回答各不相同。这就是我要找的!
【解决方案2】:

根据我有限的理解,这里是我可以到达的地方:

myd <- data.frame (var1 = c("II", "III", "IV", "V"), zero_co = c(15.15152 , 3.030303,    0,     0),
             non_zero_CO = c(84.84848,   96.969697,  100,   100),
              size = c(230.00000,  813.000000,  317,  1532))
myd1 <- as.matrix (t(myd[,2:3]))

barplot(myd1)

【讨论】:

    【解决方案3】:

    我不确定你希望最终的情节是什么样子,但这里有一个ggplot2 提案。

    首先,将数据重新整形为长格式:

    library(reshape2)
    myd_long <- melt(myd, measure.vars = c("zero_co", "non_zero_CO"))
    

    计算绝对值(我猜value代表size的百分比。):

    myd_long <- within(myd_long, valueAbs <- size * value / 100)
    

    剧情:

    library(ggplot2)    
    
    ggplot(myd_long, aes(y = valueAbs, x = var1, fill = variable)) +
      geom_bar(stat = "identity")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-28
      • 1970-01-01
      • 1970-01-01
      • 2017-05-28
      • 1970-01-01
      相关资源
      最近更新 更多