我有一个有多个变量的数据帧,我想知道如何像Excel中的plotting选项那样绘制它们。
下面是一个简单的数据示例:
> 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我想要的是一个带有V1的x轴,当V2为A或B时,一个包含所有V3计数的y轴。
有人能分享一些关于如何做到这一点的想法吗?因为它只能与2*2表一起使用,所以barplot函数似乎不起作用?
谢谢。
编辑:
这个图不是由给定的数据生成的:

将y轴视为V3的百分比,将x轴视为V1,并为每个级别的V2创建条形图。
发布于 2017-03-24 17:21:23
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 )发布于 2017-03-24 18:23:07
首先,您需要获取一个包含要绘制的值的摘要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"))

https://stackoverflow.com/questions/42995155
复制相似问题