ggplot:子集使用管道传递数据的层 [英] ggplot: Subset a layer where data is passed using a pipe
问题描述
我试图对绘图的一层进行子集化,然后通过管道将数据传递到 ggplot
。
这里是一个示例:
library(dplyr)
库(ggplot2)
库(比例)
set.seed(12345)
df_example = data_frame(Month = rep(seq.Date(as.Date( 2015 -01-01),
as.Date( 2015-12-31),by = month),2),
Value = sample(seq.int(30,150) ,size = 24,replace = TRUE),
指标= as.factor(rep(c(1,2),每个= 12)))
df_example%&%;%
group_by(Month)%>%
mutate(`相对值=值/总和(Value))%&%;%
ungroup()%&%;%
ggplot(aes (x =月,y =值,填充=指标,组=指标))+
geom_bar(位置=填充,stat =身份)+
theme_bw()+
scale_y_continuous(labels = percent_format())+
geom_line(aes(x = Month,y =`Relative Value`))
这给出了:
我只想显示其中一行,如果在 geom_line
层中这样的代码行得通:
geom_line(subset =。(Indicator == 1),aes(x = Month,y =`Relative Value`) )
编辑:
会话信息:
R版本3.2.1(2015-06-18)平台:x86_64-w64-mingw32 / x64(64位)在以下版本下运行:Windows Server 2012 x64
(内部版本9200)
区域设置:
I am trying to subset a layer of a plot where I am passing the data to
ggplot
through a pipe.Here is an example:
library(dplyr) library(ggplot2) library(scales) set.seed(12345) df_example = data_frame(Month = rep(seq.Date(as.Date("2015-01-01"), as.Date("2015-12-31"), by = "month"), 2), Value = sample(seq.int(30, 150), size = 24, replace = TRUE), Indicator = as.factor(rep(c(1, 2), each = 12))) df_example %>% group_by(Month) %>% mutate(`Relative Value` = Value/sum(Value)) %>% ungroup() %>% ggplot(aes(x = Month, y = Value, fill = Indicator, group = Indicator)) + geom_bar(position = "fill", stat = "identity") + theme_bw()+ scale_y_continuous(labels = percent_format()) + geom_line(aes(x = Month, y = `Relative Value`))
This gives:
I would like only one of those lines to appear, which I would be able to do if something like this worked in the
geom_line
layer:geom_line(subset = .(Indicator == 1), aes(x = Month, y = `Relative Value`))
Edit:
Session info:
R version 3.2.1 (2015-06-18) Platform: x86_64-w64-mingw32/x64 (64-bit) Running under: Windows Server 2012 x64 (build 9200)
locale: 2 LC_COLLATE=English_United States.1252 LC_CTYPE=English_United States.1252 [3] LC_MONETARY=English_United States.1252 LC_NUMERIC=C [5] LC_TIME=English_United States.1252
attached base packages: 2 stats graphics grDevices utils
datasets methods baseother attached packages: 2 scales_0.3.0 lubridate_1.3.3 ggplot2_1.0.1 lazyeval_0.1.10 dplyr_0.4.3 RSQLite_1.0.0
readr_0.2.2 [8] RJDBC_0.2-5 DBI_0.3.1 rJava_0.9-7loaded via a namespace (and not attached): 2 Rcpp_0.12.2
knitr_1.11 magrittr_1.5 MASS_7.3-40 munsell_0.4.2
lattice_0.20-31 [7] colorspace_1.2-6 R6_2.1.1 stringr_1.0.0 plyr_1.8.3 tools_3.2.1 parallel_3.2.1 [13] grid_3.2.1
gtable_0.1.2 htmltools_0.2.6 yaml_2.1.13 assertthat_0.1
digest_0.6.8 [19] reshape2_1.4.1 memoise_0.2.1
rmarkdown_0.8.1 labeling_0.3 stringi_1.0-1 zoo_1.7-12
[25] proto_0.3-10
解决方案library(dplyr) library(ggplot2) library(scales) set.seed(12345) df_example = data_frame(Month = rep(seq.Date(as.Date("2015-01-01"), as.Date("2015-12-31"), by = "month"), 2), Value = sample(seq.int(30, 150), size = 24, replace = TRUE), Indicator = as.factor(rep(c(1, 2), each = 12))) df_example %>% group_by(Month) %>% mutate(`Relative Value` = Value/sum(Value)) %>% ungroup() %>% ggplot(aes(x = Month, y = Value, fill = Indicator, group = Indicator)) + geom_bar(position = "fill", stat = "identity") + theme_bw()+ scale_y_continuous(labels = percent_format()) + geom_line(aes(x = Month, y = `Relative Value`,linetype=Indicator)) + scale_linetype_manual(values=c("1"="solid","2"="blank"))
yields:
这篇关于ggplot:子集使用管道传递数据的层的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!