ggplot2 中的反向堆叠顺序 geom_order

Reverse stacking order in ggplot2 geom_order

我正在尝试按照 this ggplot2 教程(不幸的是它没有评论来问我的问题)在面积图上,但由于某种原因我的输出与作者的输出不同。我执行以下代码:

library(ggplot2) 
charts.data <- read.csv("copper-data-for-tutorial.csv")

p1 <- ggplot() + geom_area(aes(y = export, x = year, fill = product), data = charts.data, stat="identity")

dataset如下:

> charts.data
   product year export percentage   sum
1   copper 2006   4176         79  5255
2   copper 2007   8560         81 10505
3   copper 2008   6473         76  8519
4   copper 2009  10465         80 13027
5   copper 2010  14977         86 17325
6   copper 2011  15421         83 18629
7   copper 2012  14805         82 18079
8   copper 2013  15183         80 19088
9   copper 2014  14012         76 18437
10  others 2006   1079         21  5255
11  others 2007   1945         19 10505
12  others 2008   2046         24  8519
13  others 2009   2562         20 13027
14  others 2010   2348         14 17325
15  others 2011   3208         17 18629
16  others 2012   3274         18 18079
17  others 2013   3905         20 19088
18  others 2014   4425         24 18437

当我打印绘图时,我的结果是:

相反,教程中完全相同的代码显示了一个顺序相反的图,看起来好多了,因为底部的数量较少:

我怀疑是作者遗漏了一些代码,还是因为我们使用了不同的ggplot2版本,所以输出结果不同。如何更改堆叠顺序以获得相同的输出?

我的 sessionInfo()

> sessionInfo()
R version 3.3.2 (2016-10-31)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1

locale:
[1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United States.1252    LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C                           LC_TIME=English_United States.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] plyr_1.8.4     extrafont_0.17 ggthemes_3.3.0 ggplot2_2.2.0 

loaded via a namespace (and not attached):
 [1] Rcpp_0.12.8      digest_0.6.10    assertthat_0.1   grid_3.3.2       Rttf2pt1_1.3.4   gtable_0.2.0     scales_0.4.1    
 [8] lazyeval_0.2.0   extrafontdb_1.0  labeling_0.3     tools_3.3.2      munsell_0.4.3    colorspace_1.3-1 tibble_1.2  

这里有两个选项,这两个选项都要求您的 aes(fill)factor

1) 更改 factor 的顺序,使所需的添加剂 level 排在第一位:

df$product %<>% factor(levels= c("others","copper"))

ggplot(data = df, aes(x = year, y = export)) +
    geom_area(aes(fill = product), position = "stack")

2) 或保持原样(铜优先)并告诉 position_stack(reverse = TRUE):

df$product %<>% as.factor()
ggplot(data = df, aes(x = year, y = export)) +
    geom_area(aes(fill = product), position = position_stack(reverse = T))

%<>% 来自 library(magrittr)

我看到了你的邮件。我是该教程的作者之一。非常感谢您询问我的材料。

根据您的 post

,这是相关的块
p2 <- ggplot() + geom_area(aes(y = export, x = year, fill = product), 
                           data = charts.data, stat="identity")
p2

请注意,本教程是使用不同版本的 ggplot2 制作的,因为我们正在更新这些教程,而这些教程并非一口气写成。

本教程来自一个 Rmd 文件,该文件以图表形式显示了代码行的状态。

你可以在 https://leanpub.com/ 阅读我的旧教程的演变形式,因为它们演变成了一本书的形式,标题为 "The Hitchhiker's Guide to Ggplot2 in R" 我告诉你,因为我们更新了本书的某些部分查看 ggplot2 2.2.0 是否生成了我们在旧 ggplot2 版本中所做的。

Nathan Day 说的很有用,但我检查了两次(刚才),我得到了与教程中相同的情节。

这是我的sessionInfo()

> sessionInfo()
R version 3.3.1 (2016-06-21)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: OS X 10.11.6 (El Capitan)

locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] ggplot2_2.2.0

loaded via a namespace (and not attached):
 [1] colorspace_1.2-7 scales_0.4.1     assertthat_0.1   lazyeval_0.2.0   plyr_1.8.4      
 [6] tools_3.3.1      gtable_0.2.0     tibble_1.2       Rcpp_0.12.7      grid_3.3.1      
[11] munsell_0.4.3   

此致

@Vasilis

这个完全可重现的例子怎么样?在发布一些尴尬的解决方案之前,我确实更喜欢考虑一下。

library(ggplot2)
library(ggthemes)
library(extrafont)
library(forcats)

charts.data.2 <- read.csv("copper-data-for-book.csv")
charts.data.2 <- as.data.frame(charts.data.2)
charts.data.2$product <- factor(charts.data.2$product, levels = c("others","copper"), 
  labels = c("Pulp wood, Fruit, Salmon & Others ","Copper"))

fill <- c("#b2d183","#40b8d0")

p2 <- ggplot() + 
  geom_area(aes(y = export, x = year, fill = product), data = charts.data.2, 
    stat="identity") + 
  scale_x_continuous(breaks=seq(2006,2014,1)) + 
  labs(x="Year", y="USD million") + 
  ggtitle("Composition of Exports to China ($)") + 
  scale_fill_manual(values=fill) + 
  theme(panel.border = element_rect(colour = "black", fill=NA, size=.5), 
    axis.text.x=element_text(colour="black", size = 10), 
    axis.text.y=element_text(colour="black", size = 10),
    legend.key=element_rect(fill="white", colour="white"),
    legend.position="bottom", legend.direction="horizontal", 
    legend.title = element_blank(),
    panel.grid.major = element_line(colour = "#d3d3d3"), 
    panel.grid.minor = element_blank(), 
    panel.background = element_blank(),
    plot.title = element_text(size = 14, family = "Tahoma", face = "bold"), 
    text=element_text(family="Tahoma")) +
  guides(fill = guide_legend(reverse=T))
p2