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 關注
- 634 瀏覽
添加回答
舉報