3 回答
TA贡献1847条经验 获得超11个赞
你说 :
也许我的data.frame格式不正确?
是的,这是真的。您的数据为宽格式,您需要以长格式输入。一般来说,长格式更适合变量比较。
使用reshape2例如,你做到这一点使用melt:
dat.m <- melt(dat,id.vars = "Rank") ## just melt(dat) should work
然后您得到了您的barplot:
ggplot(dat.m, aes(x = Rank, y = value,fill=variable)) +
geom_bar(stat='identity')
但是,使用lattice和barchart智能公式符号,你不需要重塑你的数据,只是这样做:
barchart(F1+F2+F3~Rank,data=dat)
TA贡献1806条经验 获得超5个赞
您需要将数据转换为长格式,并且不应$在内部使用aes:
DF <- read.table(text="Rank F1 F2 F3
1 500 250 50
2 400 100 30
3 300 155 100
4 200 90 10", header=TRUE)
library(reshape2)
DF1 <- melt(DF, id.var="Rank")
library(ggplot2)
ggplot(DF1, aes(x = Rank, y = value, fill = variable)) +
geom_bar(stat = "identity")
TA贡献2012条经验 获得超12个赞
基于罗兰的答案,tidyr用于将数据从宽到长整形:
library(tidyr)
library(ggplot2)
df <- read.table(text="Rank F1 F2 F3
1 500 250 50
2 400 100 30
3 300 155 100
4 200 90 10", header=TRUE)
df %>%
gather(variable, value, F1:F3) %>%
ggplot(aes(x = Rank, y = value, fill = variable)) +
geom_bar(stat = "identity")
- 3 回答
- 0 关注
- 606 浏览
添加回答
举报