【问题标题】:R: barplot where x-axis has many identical valuesR:条形图,其中 x 轴有许多相同的值
【发布时间】:2013-08-26 22:04:39
【问题描述】:

我的数据看起来像:

0.2 0.8 val1
0.3 0.7 val1
0.9 0.1 val1
0.22 0.78 val2
0.30 0.70 val3
0.00 1.00 val3

我想要的是一个条形图,其中每一行都绘制为自己的条形图,但在 x 轴的名称中,我不想要“val1”3 次,我只想要一次并集中(使用相对于 val1 条)。我用谷歌搜索了很多,但老实说不知道该谷歌什么。

【问题讨论】:

  • 欢迎来到 SO。你可能想看看here
  • 谢谢,你能指出这个页面在哪里可以回答我的问题吗?
  • 你能告诉你你想画什么吗?
  • 给出上面的例子: barplot : 6 个不同的条,但 x 轴上有 3 个标签

标签: r plot histogram bar-chart


【解决方案1】:
barplot(t(as.matrix(dat[1:2])), 
        names.arg=c("",as.character(dat$V3[2]),"", as.character(dat$V3[4:6])))

【讨论】:

  • 关于 val3 没有被复制的问题中没有任何内容。
【解决方案2】:

可能是这样的吗?

dat <- read.table(text="0.2 0.8 val1
0.3 0.7 val1
0.9 0.1 val1
0.22 0.78 val2
0.30 0.70 val3
0.00 1.00 val3",header=FALSE)

bp <- barplot(t(as.matrix(dat[1:2])))
axis(1,at=tapply(bp,dat[,3],mean),labels=unique(dat[,3]))

我不知道您将如何区分哪个标签属于哪个条 - 结果确实与“6 个不同的条,但 x 轴上有 3 个标签”非常混淆请求。

为避免分组混淆,您始终可以执行以下操作:

bp <- barplot(t(as.matrix(dat[1:2])))
mapply(
  function(a,b,c) axis(1,at=c(a,b,c),labels=FALSE),
  tapply(bp,dat[,3],tail,1),
  tapply(bp,dat[,3],head,1),
  tapply(bp,dat[,3],mean)
)
axis(1,at=tapply(bp,dat[,3],mean),labels=unique(dat[,3]),lwd=NA)

【讨论】:

    【解决方案3】:
    > mydata
      col1 col2 variable
    1 0.20 0.80     val1
    2 0.30 0.70     val1
    3 0.90 0.10     val1
    4 0.22 0.78     val2
    5 0.30 0.70     val3
    6 0.00 1.00     val3
    
    library(ggplot2)
     mm <- ddply(mydata, .(variable), summarise, mecol1 = mean(col1),mecol2=mean(col2))
     ggplot(mm, aes(x = factor(variable), y = mecol1)) + geom_bar(stat = "identity")
     ggplot(mm, aes(x = factor(variable), y = mecol2)) + geom_bar(stat = "identity")
    

    【讨论】:

    • 这不是 6 个不同的小节吗? :)
    • 看看latemail的回答
    【解决方案4】:

    另一个ggplot 替代方案:

    df <- read.table(text = "
    0.2 0.8 val1
    0.3 0.7 val1
    0.9 0.1 val1
    0.22 0.78 val2
    0.30 0.70 val3
    0.00 1.00 val3")
    
    names(df) <- c("y1", "y2", "x1")
    df$x2 <- 1:nrow(df)
    df2 <- melt(df, id.vars = c("x1", "x2"))
    
    xlabs <- ddply(.data = df, .variables = .(x1), summarize, xval = median(x2))
    labs$x1 <- labs$x1
    
    ggplot(data = df2, aes(x = x2, y = value, fill = variable)) +
       geom_bar(stat = "identity") +
       scale_x_continuous(breaks = labs$xval, labels = labs$x1) +
       xlab("")
    

    【讨论】:

      猜你喜欢
      • 2020-12-17
      • 1970-01-01
      • 2018-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多