【问题标题】:Plot multiple columns with geom_bar()用 geom_bar() 绘制多列
【发布时间】:2020-05-11 17:20:51
【问题描述】:

我最近开始使用 R 进行编程,我正在尝试使用 ggplot2 绘制几列。

我的数据框如下所示:

mydf <- data.frame(Names, Less, Equal, More)
mydf

    Names Less Equal More
1   Sarah    8    25    8
2   Mark    13    13   13
3   Peter   11    26    5

为了说明我是如何创建这个数据框的,“Less”看起来像这样:

[1]  8 13 11

我希望能够比较每个名字的分数,如果他们的分数更低、相等或更高。在 x 轴上,我实际上想绘制“更多”、“更少”和“相等”,每个名称都有不同的条形图。在 y 轴上,我想打印分数(例如 8、25...)。我想为每个名称创建多个条形图。

我尝试了几件事,但我只成功地在 y 轴上添加了一个值:

test <- ggplot(mydf, aes(x= Names, y= More)) +
geom_bar(stat = "identity") 

我觉得问题出在我的数据组织方式上,但我不确定。

【问题讨论】:

  • 您能添加当前和预期的地块吗?

标签: r ggplot2


【解决方案1】:

您可以使用 data.table 包将数据融合为长格式。

library(data.table)

df <- melt(mydf, id.vars = "Names", variable.name = "category",
           value.name="scores")

如果你想要分组图表,你可以指定 position="dodge"。

ggplot(df, aes(x = category , y= scores, fill = Names)) +
  geom_bar(position="dodge", stat = "identity")

【讨论】:

    【解决方案2】:

    您需要将数据更改为长格式,其中一列用于值,另一列用于标签:

        Names values label
    1   Sarah    8    less
    2   Mark    13    less
    3   Peter   11    less
    1   Sarah    25    equal
    2   Mark    13    equal
    3   Peter   26    equal
    1   Sarah    8    more
    2   Mark    13    more
    3   Peter   5    more
    
    

    那么代码就是

    test <- ggplot(mydf, aes(x= label, y= values, fill=names)) +
      geom_bar(position="dodge",  stat="identity") 
    test
    

    这里是一个例子:https://www.r-graph-gallery.com/48-grouped-barplot-with-ggplot2.html

    【讨论】:

      猜你喜欢
      • 2015-07-22
      • 1970-01-01
      • 1970-01-01
      • 2020-02-02
      • 2017-01-19
      • 2019-06-30
      相关资源
      最近更新 更多