【问题标题】:R bar plot with 3 variables具有 3 个变量的 R 条形图
【发布时间】:2017-03-24 08:57:40
【问题描述】:

我有一个包含多个变量的数据框,我想知道如何像 Excel 中的绘图选项那样绘制它们。

只是一个简单的数据示例:

  > V1   V2  V3
    1    A    0
    1    A    0
    1    B    1
    1    B    0
    1    A    1
    2    A    0
    2    B    0
    2    A    0
    2    A    0
    2    A    0

我想要的是一个带有V1x 轴,一个带有V3 的所有计数的y 轴,当V2AB 时。

有人可以分享一些关于如何做到这一点的想法吗? barplot 函数似乎没有能力,因为它只能与 2*2 表一起使用?

谢谢。

编辑:

这个图不是由给出的数据生成的:

y 轴视为V3 的百分比,V1x 轴,并为V2 的每个级别创建一个条形图。

【问题讨论】:

  • 我可能对 Excel 已经麻木了,但是你能画出或者展示一个最终图的例子吗?

标签: r bar-chart


【解决方案1】:
library( 'ggplot2' )
library( 'reshape2' )
df1 <- dcast( data = df1, formula = V1 ~ V2,  value.var = 'V3',  fun.aggregate = sum )  # get sum of V3 by grouping V1 and V2
df1 <- melt( data = df1, id.vars = 'V1')   # melt data
df1
#    V1 variable value
# 1  1        A     1
# 2  2        A     5
# 3  1        B     1
# 4  2        B     0  


ggplot(data = df1, aes( x = factor( V1 ), y = value, fill = variable ) ) +    # print bar chart
  geom_bar( stat = 'identity' )

使用position = 'dodge

ggplot(data = df1, aes( x = factor( V1 ), y = value, fill = variable ) ) +    # print bar chart
  geom_bar( stat = 'identity', position = 'dodge' )

数据:

df1 <- read.table(text = 'V1   V2  V3
    1    A    0
                  1    A    0
                  1    B    1
                  1    B    0
                  1    A    1
                  2    A    0
                  2    B    0
                  2    A    0
                  2    A    5
                  2    A    0', header = TRUE, stringsAsFactors = FALSE )

【讨论】:

  • 谢谢!但是ggplot 是否有像barplot 那样的“旁边”选项,所以我没有堆叠条,而是条彼此相邻?
  • 谢谢!当我尝试重现它时,运行dcast时出现“找不到函数“.fun””?
  • 嗨@Sathish 重新启动后它仍然是一样的。但我确信这是包和功能的问题,而不是你的代码。十分感谢! =)
【解决方案2】:

首先,您需要获得一个摘要 dataframe,其中包含您要绘制的值。

df <- data.frame(V1 = rep(1:2,each=5), V2 = c("A","A","B", "B", "A", "A", "B","A", "A", "A"), 
                 V3 = c(0,0,1,0,1,0,0,0,0,0))

values <- aggregate(df$V3, list(V1 = df$V1, V2 = df$V2), sum)

#    V1 V2 V3
# 1  1  A  1
# 2  2  A  0
# 3  1  B  1
# 4  2  B  0

ggplot(values, aes(x = factor(V1), y = V3, fill = V2))+
                geom_bar(stat = "identity", width = 0.2)

或者,如果您不希望它们彼此堆叠,则可以这样做。添加一些标签。

ggplot(values, aes(x = factor(V1), y = V3, fill = V2))+
                geom_bar(stat = "identity", width = 0.2, position = "dodge") +
                labs(list(x = "x", y = "count",fill = "group"))

编辑

我尝试在dataframe上直接使用ggplot而不做总结,结果是一样的。

## a little change in V3
df <- data.frame(V1 = rep(1:2,each=5), 
                 V2 = c("A","A","B", "B", "A", "A", "B","A", "A", "A"), 
                 V3 = c(2,0,1,2,1,3,3,8,1,0))
## plot df directly
ggplot(df, aes(factor(V1), V3, fill = V2)) + 
        geom_bar(stat = "identity", width = 0.2, position = "dodge") +
        labs(list(x = "x", y = "count",fill = "group"))

【讨论】:

  • 谢谢@Misaki!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多