2017-03-24 54 views
2

我有一个有多个变量的数据框,我想知道如何绘制它们,如Excel中的绘图选项。带有3个变量的R条图

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

> 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 

我想吃点什么,是一个x轴与V1,一个y轴与V3所有计数时,V2AB

有人可以请分享一些想法如何做到这一点? barplot函数似乎不可行,因为它只能与2*2表一起使用?

谢谢。

编辑:

不受虽然给出的数据而生成该曲线图: enter image description here

考虑y轴作为V3百分比的V1x轴线和用于V2一栏中的每个水平图表已创建。

+3

我可能是麻木到Excel,但您可以绘制或显示最后的数字的例子吗? –

+0

谢谢你的补充。 – user95902

回答

3
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') 

enter image description here

使用position = 'dodge

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

enter image description here

数据:

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) 
+0

谢谢!但'ggplot'有'barplot'这样的“旁边”选项,所以我不会得到堆叠的酒吧,但是彼此相邻吗? – user95902

+0

Thanx!当我试图重现它时,运行'dcast'时出现“找不到功能”.fun“”? – user95902

+0

嗨@Sathish重新启动后仍然是一样的。但我确信这是包和函数的问题,而不是你的代码。万分感谢! =) – user95902

1

首先,您需要获取包含要绘制的值的摘要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) 

one

OR,这一点,如果你不希望他们要在彼此顶部堆叠。添加一些标签。

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")) 

three

+0

谢谢@Misaki! – user95902