亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

堆積條形圖

堆積條形圖

拉風的咖菲貓 2019-09-24 15:43:41
我想使用ggplot2和geom_bar創建一個堆積圖。這是我的源數據:Rank F1     F2     F31    500    250    502    400    100    303    300    155    1004    200    90     10我想要一個堆積圖,其中x是排名,y是F1,F2,F3中的值。# Getting Source Data  sample.data <- read.csv('sample.data.csv')# Plot Chart  c <- ggplot(sample.data, aes(x = sample.data$Rank, y = sample.data$F1))  c + geom_bar(stat = "identity")這是我所能得到的。我不確定如何堆疊其余的字段值。也許我的data.frame格式不正確?
查看完整描述

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)


查看完整回答
反對 回復 2019-09-24
?
忽然笑

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

http://img1.sycdn.imooc.com//5d89c95000016d8d06580556.jpg

查看完整回答
反對 回復 2019-09-24
?
繁花如伊

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

http://img1.sycdn.imooc.com//5d89c95c0001e38d10160556.jpg

查看完整回答
反對 回復 2019-09-24
  • 3 回答
  • 0 關注
  • 634 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號