2016-12-06 259 views
1

我正在尝试关注区域图上的this ggplot2教程(非常不幸,它没有评论来问我的问题),但出于某种原因,我的输出与作者的输出不同。我执行下面的代码:ggplot2中的反向堆叠顺序geom_order

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 

当我打印的情节我的结果是:

enter image description here

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

enter image description here

我怀疑作者要么被遗漏的一些代码或输出是不同的,因为我们使用不同版本的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 

回答

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") 

enter image description here

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)) 

enter image description here

%<>%library(magrittr)

+0

非常感谢,这两种解决方案工作的伟大。对于第一个解决方案,我首先必须使用'charts.data < - as.data.frame(charts.data)'将我的数据集转换为数据框。 此外,对于我的表达式'charts.data $ product%<>%因子(levels = c(“others”,“copper”))'throws'错误:找不到函数“%<>%”'。 什么工作是'charts.data $ product < - factor(charts.data $ product,levels = c(“others”,“copper”))' – Vasilis

+0

刚刚在'%<>%'上看到了您的编辑,我没有不知道这个图书馆,会检查出来。再次感谢 – Vasilis

+0

不用担心,乐意帮忙。 '%<>%'可以节省很多多余的输入,强烈建议 – Nate

1

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

这是根据您的文章有关块

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

请考虑该教程是在不同版本的GGPLOT2作出我们更新这些教程和那些没有在一个坐写的。

该教程来自一个Rmd文件,它显示了一个图表代码行状态。

你可以在https://leanpub.com/上看到我的老教程的演变形式,因为它们演变成了一本书的标题为“R的Ggplot2的Hitchhiker指南”的书的形状。我告诉你,因为我们更新了书的某些部分查看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 

问候

+0

感谢您的回复,我非常喜欢您的教程。我编辑我的问题,包括我的'sessionInfo()' – Vasilis

+0

谢谢@Vasilis。我也回答了你的GitHub问题。 – pachamaltese

1

@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 

enter image description here

+0

谢谢,它效果很好! – Vasilis