首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将数据帧列值绘制为facet列

将数据帧列值绘制为facet列
EN

Stack Overflow用户
提问于 2012-03-21 11:16:36
回答 1查看 1.5K关注 0票数 0

我有以下形式的调查数据框架:

代码语言:javascript
复制
    category    shift   difficulty  importance  frequency   dsmImportance   supervisor
1   Monitoring  Day     3           1           1           3               Debra Smith
2   Monitoring  Day     2           1           1           3               Debra Smith
3   Paperwork   Night   3           1           1           3               Mark Hobbs
4   Operations  Day     1           1           1           2               Ryan Jones
5   Rostering   Night   1           1           1           1               Mark Hobbs

数据是对工作轮班期间执行的任务的调查,根据每项任务的难度、重要性等,对每项任务的评分为1-3。

我想要做的是绘制一个任务分级直方图数组,其中数组列为difficultyimportancefrequencydsmImportance,行为category。到目前为止,我的方法是为每种评级类型(difficultyimportance等)创建单个列。使用category分面,然后使用grid_layout()将列组合在一起。您可以看到结果这里。(不幸的是,在我成为会员之前,我无法直接链接到一个图像。)它很管用,但它并不是很漂亮。

如何完全使用ggplot2**'s faceting函数创建数组?**我对R(和堆栈溢出)还不熟悉,但我很确定不能用它当前形式的数据来完成这个任务。我想我必须将数据熔化并转换成另一种形式,但我不知道应该是什么形式。

代码

代码语言:javascript
复制
library(ggplot2)
library(gridExtra)

walkaday.dirty = read.csv("~/Documents/walkaday.csv", header = TRUE, sep = ",", fill = TRUE, blank.lines.skip = TRUE)
walkaday = na.omit(walkaday.dirty)

// Order category levels by task frequency
category.levels = names(sort(table(walkaday$category), decreasing = TRUE))
walkaday$category = factor(walkaday$category, levels = category.levels)

难度图

代码语言:javascript
复制
difficulty = ggplot(walkaday, aes(factor(difficulty, c("3", "2", "1")), fill = difficulty)) + geom_bar() + coord_flip() + xlab("") + ylab("") + opts(legend.position = "none")
difficulty = difficulty + facet_grid(category ~ .) + opts(strip.text.y = theme_blank())

重要性图

代码语言:javascript
复制
importance = ggplot(walkaday, aes(factor(importance, c("3", "2", "1")), fill = importance)) + geom_bar() + coord_flip() + xlab("") + ylab("") + opts(legend.position = "none", axis.text.y = theme_blank(), axis.ticks = theme_blank())
importance = importance + facet_grid(category ~ .) + opts(strip.text.y = theme_blank())

频率图

代码语言:javascript
复制
frequency = ggplot(walkaday, aes(factor(frequency, c("3", "2", "1")), fill = frequency)) + geom_bar() + coord_flip() + xlab("") + ylab("") + opts(legend.position = "none", axis.text.y = theme_blank(), axis.ticks = theme_blank())
frequency = frequency + facet_grid(category ~ .) + opts(strip.text.y = theme_blank())

DSM重要性图

代码语言:javascript
复制
dsmImportance = ggplot(walkaday, aes(factor(dsmImportance, c("3", "2", "1")), fill = dsmImportance)) + geom_bar() + coord_flip() + xlab("") + ylab("") + opts(legend.position = "none", axis.text.y = theme_blank(), axis.ticks = theme_blank())
dsmImportance = dsmImportance + facet_grid(category ~ .) + opts(strip.text.y = theme_text(angle = 0))

组合图表

代码语言:javascript
复制
pushViewport(viewport(layout = grid.layout(1, 4, widths = c(1,1,1,1.7))))
print(difficulty + opts(title = "Task difficulty"), vp = viewport(layout.pos.row = 1, layout.pos.col = 1)) 
print(importance + opts(title = "Task importance"), vp = viewport(layout.pos.row = 1, layout.pos.col = 2)) 
print(frequency + opts(title = "Task frequency"), vp = viewport(layout.pos.row = 1, layout.pos.col = 3)) 
print(dsmImportance + opts(title = "DSM importance"), vp = viewport(layout.pos.row = 1, layout.pos.col = 4))

数据

可以找到数据集这里

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-21 12:40:57

将数据转换为melt格式,以便评级类型显示为一个单独的变量:

代码语言:javascript
复制
walkaday <- read.csv("http://dl.dropbox.com/u/7046039/walkaday.csv")
walkaday.long <- melt(walkaday,id.vars=c(1,2,7))
qplot(factor(value,c("3","2","1")),data=walkaday.long,geom="bar")+facet_grid(.~variable)

注意,新变量的名称是variable,值是value

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

https://stackoverflow.com/questions/9803527

复制
相关文章

相似问题

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