使用for循环在ggplot2中创建多个图表

4

我看了这些问题(1)(2), 但是它们似乎与我的问题无关。

我试图首先创建缎带(在循环之外),然后在循环中添加一堆线条和点图。但是,最终的图仅包含最后一个循环中的线条/点,而不是所有的。整个代码都在一个函数中,我想从函数中返回ggplot(p, 在这种情况下)对象,以便稍后使用。

hist_points_cols_val<-hist_points_cols(hist_points)
hist_points_labels_val<-hist_points_labels(hist_points)
p <- ggplot()+
geom_ribbon(aes(x = x_labels , ymin = Min , ymax = Max),data=t_out_summary,colour = '#ece9d8',fill = '#ff9999',alpha = 0.4)+
geom_ribbon(aes(x = x_labels , ymin = Qtr1 , ymax = Qtr3),data=t_out_summary,colour = '#ece9d8',fill = '#33ff99',alpha = 0.2)+
scale_x_discrete(name=scale_x, labels=plot_labels)+
scale_y_continuous(name=scale_y, labels = percent_format())+
geom_line(aes(x = x_labels,y = Median,colour="Median"),data=t_out_summary)+
geom_point(aes(x = x_labels,y = Median,colour="Median"),data=t_out_summary,shape=4)

print(hist_points_cols_val)
print(hist_points_labels_val)
for( i in 1: length(hist_points)){
p   <- p + geom_line(aes(x = x_labels,y = t_out_summary[[hist_points_cols_val[i]]],colour=hist_points_labels_val[i]),data=t_out_summary,linetype='dashed')+
    geom_point(aes(x = x_labels,y = t_out_summary[[hist_points_cols_val[i]]],colour=hist_points_labels_val[i]),data=t_out_summary,shape=4)      
}

p<-p+scale_colour_hue(name="Legend")

数据看起来像这样:
`> str(t_out_summary)
'data.frame':   12 obs. of  11 variables:
 $ Min     : num  0.121 0.132 0.145 0.164 0.172 ...
 $ Qtr1    : num  0.154 0.165 0.174 0.191 0.2 ...
 $ Median  : num  0.184 0.195 0.203 0.218 0.225 ...
 $ Qtr3    : num  0.22 0.231 0.238 0.249 0.253 ...
 $ Max     : num  0.398 0.381 0.37 0.351 0.339 ...
 $ p_1D    : num  0.16 0.169 0.176 0.197 0.207 ...
 $ p_2D    : num  0.153 0.163 0.171 0.193 0.204 ...
 $ p_1W    : num  0.168 0.179 0.187 0.204 0.215 ...
 $ p_2W    : num  0.141 0.154 0.163 0.184 0.196 ...
 $ p_1M    : num  0.146 0.157 0.165 0.186 0.201 ...
 $ x_labels: int  1 2 3 4 5 6 7 8 9 10 ...`

我正在使用最小值和最大值来创建带状图,然后想要添加p_1D、p_2D点和线。我不确定你所说的“有益于ggplot2图形”的方式是什么?我正在使用for循环来叠加不同的图表。如何在没有for循环的情况下完成它?

1
如下所述,如果没有可重现的示例,我实际上无法提供帮助。然而,这段代码在我的看法中似乎是按照基础图形而不是ggplot2图形编写的。你觉得需要一个for循环,甚至更糟糕的是,在循环内部对映射的y变量进行子集化,这表明你只需要以有利于ggplot的方式组织数据即可。 - joran
你是对的。我通过融合数据成功地完成了它。 - Neerav
2个回答

3
您没有提供可重现的示例,因此我会尝试解释我会尝试什么:
将您的图形保存到一个列表中,其中每个列表元素中的色带都是相同的。 然后遍历该列表并添加不同的线条和点。 随后,为每个列表元素添加图例名称。
然后您可以从列表中访问这些图形。

您能提供一个“将您的图表保存到列表中,使每个列表元素中的色带相同。然后循环遍历列表并添加不同的线条和点。最后为每个列表元素添加图例名称”的示例吗? - Neerav
我通过“融合”数据来制作图表。请参见下文。 - Neerav

0
hist_summ<-melt(as.matrix(hist_summary))
geom_line(aes(x=Var2,y=value,colour = Var1,group=Var1),data=hist_summ)

这解决了问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接