代码之家  ›  专栏  ›  技术社区  ›  Nadrieci

ggplot2:在aes(..)中使用'fill='和geom\u bar(…)。颜色不会重复

  •  1
  • Nadrieci  · 技术社区  · 6 年前

    我的问题是,这些颜色形成了三块颜色,对应于变量Atr的三个级别,而不是重复每种颜色。我希望每个条由as块组成,就像每个染色体的End\U位置一样。 事实上,我发现 THIS POST :

    他的问题是我的解决方案。我试图完全复制他的代码,但替换了值,但不起作用。

    此外,我希望您能提出一些建议,以改进此图表的可视化。

    ggplot(df2, aes(x = Chromosome, y = End_position, fill = Atr, label = End_position)) +
      geom_bar(stat = "identity") +
      geom_text(size = 3, position = position_stack(vjust = 0.5))+
      ggtitle('Stacked chromosome')
    

    表格:

       Chromosome End_position Atr
    1        chr1     35383099  PI
    2        chr2      8614917  PI
    3        chr2      1505317  PS
    4        chr2     15804791  PI
    5        chr2            1  PS
    6        chr3      1299265  PI
    7        chr3     22582715  PS
    8        chr3      3633786  PI
    9        chr3       399713  PS
    10       chr3       807853  PI
    

    和当前图形:

    Stacked Atr Barplot

    非常感谢,最好的奖励,

    丹尼尔。

    1 回复  |  直到 6 年前
        1
  •  2
  •   Z.Lin    6 年前

    你是不是在期待下面这样的事情?

    (为强调起见,在条形图的每个组成部分添加了黑色轮廓)

    plot

    使用的代码:

    ggplot(df2, 
           aes(x = Chromosome, y = End_position, 
               group = seq(1, nrow(df2)), # or seq(nrow(df2), 1)
               fill = Atr, label = End_position)) +
      geom_bar(stat = "identity", color = "black") +
      geom_text(size = 3, position = position_stack(vjust = 0.5))+
      ggtitle('Stacked chromosome')
    

    与原始代码的区别在于 group = seq(1, nrow(df2)) 在顶级美学中。

    这迫使ggplot将数据帧的每一行视为一个单独的组,以便具有相同 fill 值未在中分组 geom_bar() ,而是遵循数据帧中的行顺序。

    seq(nrow(df2), 1) 将实现相同的目标,但顺序相反。