首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在R中绘制分组条形图

在R中绘制分组条形图
EN

Stack Overflow用户
提问于 2012-11-03 22:40:59
回答 3查看 40.5K关注 0票数 9

我试着在R中绘制这个数据-

代码语言:javascript
运行
复制
column1  column2  column3
1-2       abc       10
1-2       def       15
1-2       ghi       20
2-3       abc       80
2-3       def       95
2-3       ghi       10
3-4       abc       30
3-4       def       55
3-4       ghi       80

X轴将是column1 (因此1-2、2-3和3-4将作为x轴),而在y轴上,应该为每个column2元素绘制column3中的值。因此,这本质上是一个“分组”条形图。

我无法使用R绘制此分组条形图。我使用的代码片段如下:

代码语言:javascript
运行
复制
dataset <- fetch(rs,n=-1)
plot_var <- table(dataset$percentage, dataset$age)
barplot(plot_var, names.arg,
        main="Title of Graph",
        xlab="Column1", col=c("darkblue","red"),
        legend = rownames(plot_var), beside=TRUE)

如何显示此分组条形图?谢谢!

EN

回答 3

Stack Overflow用户

发布于 2012-11-04 06:37:46

您的问题似乎归结为错误的数据格式。您需要制作一个具有正确行名结构的矩阵,以创建您想要的具有基础图形的绘图。以下是您的解决方案:

代码语言:javascript
运行
复制
#your data...
d <- data.frame(row.names=c("1-2","2-3","3-4"), abc = c(10,80, 30), 
                def = c(15, 95, 55), ghi = c(20, 10, 80))
#but you make a matrix out of it to create bar chart
d <- do.call(rbind, d)
#...and you are sorted
barplot(d, beside = TRUE, ylim=c(0,100), legend.text = rownames(d), 
        args.legend = list(x = "topleft", bty="n"))

但是,我有时喜欢使用lattice来完成这类任务。这一次你甚至不需要制作矩阵,你只需要保持你的data.frame的原始格式:

代码语言:javascript
运行
复制
d <- data.frame(column1=rep(c("1-2","2-3","3-4"), each=3), 
                column2=rep(c("abc", "def", "ghi"), 3), 
                column3=c(10, 15, 20, 80, 95, 10, 30, 55, 80))
require(lattice)
barchart(column3 ~ column1, groups=column2, d, auto.key = list(columns = 3))

票数 15
EN

Stack Overflow用户

发布于 2012-11-04 04:12:36

我喜欢使用ggplot2来完成这类任务。

代码语言:javascript
运行
复制
#Make the data reproducible:
column1 <- c(rep("1-2", 3), rep("2-3", 3), rep("3-4", 3))
column2 <- gl(3, 1, 9, labels=c("abc", "def", "ghi"))
column3 <- c(10, 15, 20, 80, 95, 10, 30, 55, 80)

d <- data.frame(column1=column1, column2=column2, column3=column3)

require(ggplot2)
ggplot(d, aes(x=column1, y=column3, fill=column2)) + geom_bar(position=position_dodge())

我觉得这很直观(经过一段时间的学习)是因为你清楚地说明了你想在x和y轴上做什么,我们只需要告诉ggplot (以及哪个变量定义了'fill‘颜色,以及使用哪种类型的图-这里是geom_bar )。

票数 10
EN

Stack Overflow用户

发布于 2017-01-19 19:46:55

我从Drew Steen的回答中找到了帮助,但上面的代码对我来说不起作用。我添加了stat="identity“,它起作用了。

代码语言:javascript
运行
复制
require(ggplot2)
ggplot(d, aes(x=column1, y=column3, fill=column2)) + geom_bar(stat="identity", position=position_dodge())

谢谢你德鲁的回答。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13210152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档