【发布时间】:2011-09-04 13:15:26
【问题描述】:
我正在努力在我用 R 中的 ggplot2 制作的图表中正确排序变量。
假设我有一个数据框,例如:
set.seed(1234)
my_df<- data.frame(matrix(0,8,4))
names(my_df) <- c("year", "variable", "value", "vartype")
my_df$year <- rep(2006:2007)
my_df$variable <- c(rep("VX",2),rep("VB",2),rep("VZ",2),rep("VD",2))
my_df$value <- runif(8, 5,10)
my_df$vartype<- c(rep("TA",4), rep("TB",4))
生成下表:
year variable value vartype
1 2006 VX 5.568517 TA
2 2007 VX 8.111497 TA
3 2006 VB 8.046374 TA
4 2007 VB 8.116897 TA
5 2006 VZ 9.304577 TB
6 2007 VZ 8.201553 TB
7 2006 VD 5.047479 TB
8 2007 VD 6.162753 TB
共有四个变量(VX、VB、VZ 和 VD),属于两组变量类型(TA 和 TB)。
我想将值绘制为 y 轴上的水平条,首先按变量组垂直排序,然后按变量名称,按年份分面,x 轴上的值和填充颜色对应变量组。 (即在这个简化的例子中,顺序应该是,从上到下,VB,VX,VD,VZ)
1) 我的第一次尝试是尝试以下方法:
ggplot(my_df,
aes(x=variable, y=value, fill=vartype, order=vartype)) +
# adding or removing the aesthetic "order=vartype" doesn't change anything
geom_bar() +
facet_grid(. ~ year) +
coord_flip()
但是,变量按字母倒序排列,而不是按 vartype :order=vartype 美学被忽略。
2) 在回答了我昨天发布的一个类似问题后,我根据Order Bars in ggplot2 bar graph 的帖子尝试了以下操作:
my_df$variable <- factor(
my_df$variable,
levels=rev(sort(unique(my_df$variable))),
ordered=TRUE
)
这种方法确实在图中按字母垂直顺序获取变量,但忽略了变量应该首先按变量组排序的事实(顶部是 TA 变量,下面是 TB 变量)。
3) 下面给出与2(上面)相同的:
my_df$vartype <- factor(
my_df$vartype,
levels=sort(unique(my_df$vartype)),
ordered=TRUE
)
...与第一种方法具有相同的问题(按字母倒序列出的变量,忽略组)
4) 另一种方法,基于对 Order Bars in ggplot2 bar graph 的原始答案,也提供与上述 2 相同的平台
my_df <- within(my_df,
vartype <- factor(vartype,
levels=names(sort(table(vartype),
decreasing=TRUE)))
)
我感到困惑的是,尽管有多种方法,但审美 order=vartype 被忽略了。不过,它似乎可以解决一个不相关的问题:http://learnr.wordpress.com/2010/03/23/ggplot2-changing-the-default-order-of-legend-labels-and-stacking-of-data/
希望问题清楚,欢迎提出任何建议。
马特奥
我昨天发布了一个类似的问题,但不幸的是,我在描述问题并提供可重现的示例时犯了几个错误。 从那以后,我听取了一些建议,彻底搜索了 stakoverflow 以寻找类似的问题,并据我所知应用了每个建议的解决方案组合,但无济于事。 我再次发布问题,希望能够解决我的问题,并希望对其他人有所帮助。
【问题讨论】:
-
它不是 stackoverflow.com/q/5208679/602276 的副本。请仔细阅读问题。
-
确实是同一个问题。您需要按照您希望它们在图中的顺序来指定因子的水平。链接的答案告诉你如何做到这一点。
-
+1 用于学习提供可重现的代码。
-
更一般地说,我相信在订购变量时存在与 coord_flip() 相关的问题。在我的原始数据框中(不是上面显示的那个),图例中的组顺序是正确的,并且与数据框的顺序相对应,但是变量的垂直顺序是颠倒的。 (虽然情节在概念上有所不同,但问题与learnr.files.wordpress.com/2010/03/… 类似)。据我所知,这超出了数据帧的顺序问题,而是与 ggplot2 中的顺序反转有关的问题,可能与 coord_flip 有关。