为了账号安全,请及时绑定邮箱和手机立即绑定

堆积条形图

堆积条形图

拉风的咖菲猫 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")

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

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

查看完整回答
反对 回复 2019-09-24
  • 3 回答
  • 0 关注
  • 543 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信