在删除订单美学后,在ggplot2中堆叠订单

时间:2015-11-04 16:32:37

标签: r ggplot2

最新版本的ggplot2已经删除了订单审美,之前可以用来指定条形图的堆叠顺序。在此示例中,第一个图表将图例排序为> b>角

df <- data.frame(date = rep(seq(as.Date("2015-11-02"), 
                                as.Date("2015-11-03"), 1), each = 3), 
                 country = rep(c("a", "b", "c"), 2), 
                 value = c(10, 2, 4, 3, 2, 5), stringsAsFactors = FALSE)

ggplot(df, aes(x = date, y = value, fill = country)) + 
  geom_bar(stat = "identity") + 
  scale_x_date(labels = date_format("%Y-%m-%d"))

enter image description here

然后我根据最后日期将country变量重新排序为顺序(即c> a&gt; b)。我现在希望c在堆栈和图例中位于底部。但是,只有颜色和图例可以切换,而不是堆叠顺序。

temp <- subset(df, date == max(df$date))
level_order <- temp[order(temp$value, decreasing = TRUE), "country"]
df$country <- factor(df$country, levels = level_order)

ggplot(df, aes(x = date, y = value, fill = country)) + 
  geom_bar(stat = "identity") + 
  scale_x_date(labels = date_format("%Y-%m-%d"))

在ggplot2的早期版本中,可以用aes(order = country)修复此问题。现在order已经消失了怎么办?

enter image description here

更新

ggplot2 version 1.10的新闻中宣布了对order美学的弃用。 aes_group_order的文档引用版本0.9.3.1。

如下面的一个答案所述,堆叠顺序似乎取决于它在数据框中的显示位置。因此,on可以通过在绘图之前对数据帧进行排序来改变堆叠顺序。这似乎是非常奇怪的行为,它会导致条形图之间的堆叠顺序不同。

2 个答案:

答案 0 :(得分:0)

你在哪里获得ggplot2的最新版本正在消除订单美感的信息?据我所知,order美学仍然活着并且在踢。以下代码为我

df <- data.frame(date = rep(seq(as.Date("2015-11-02"), 
                                as.Date("2015-11-03"), 1), each = 3), 
                 country = rep(c("a", "b", "c"), 2), 
                 value = c(10, 2, 4, 3, 2, 5), stringsAsFactors = FALSE)

ggplot(df, aes(x = date, y = value, fill = country, order = country)) + 
  geom_bar(stat = "identity") + 
  scale_x_date(labels = date_format("%Y-%m-%d"))

产生情节:

Plot showing reordered bar chart

此外,aes_group_order的文档仍然说这种美学&#34;也可以用来改变散点图的绘图顺序&#34; (http://docs.ggplot2.org/current/aes_group_order.html),运行?order也不会显示有关弃用的任何标志。我正在运行1.01,这似乎是根据github的最新版本。

答案 1 :(得分:0)

我不知道为什么,但是这个堆栈按照显示的顺序占据了国家。

这项工作:

temp <- subset(df, date == max(df$date))
level_order <- temp[order(temp$value, decreasing = TRUE), "country"]
df <- df[c(3, 1, 2, 6, 4, 5), ]
df$country <- factor(df$country, levels = level_order, labels = level_order )

ggplot(df, aes(x = date, y = value)) + 
  geom_bar(stat = "identity", aes(fill = country)) + 
  scale_x_date(labels = date_format("%Y-%m-%d"))

enter image description here