【发布时间】:2020-09-07 13:01:53
【问题描述】:
我正在尝试绘制包含 35 个 ggplot 的单个图像。单个图像中的绘图顺序是固定的,如下所示。
我还想要网格图像中显示的空白网格。每个网格都应该有带有特定药物编号的图。我有一个数据框“drug_dctv2”,我正在拆分它,并制作一个列表以将数据读入 for 循环。
问题是:在plot_list[[i]]中,只有最后一个plot用i(1到35)保存了35次。我也不确定如何按网格中所示的特定顺序保存绘图。
通过我的互联网搜索,我找到了像“cowplot”和“gridextra”这样的库,但我找不到合适的方法来实现这些。 我制作了一个绘图布局文件,其中包含以下顺序的药物名称,如网格图像所示,我插入了“制表符”来代替空格。但我没有找到从那里开始的方法。 我是 R 新手。任何帮助和建议将不胜感激。
数据集如下图所示。每种药物都有 10 个数据点。
**Drug_name conc viab**
Drug_1 1 1.0265
Drug_1 0.1 1.2365
Drug_1 0.01 0.5896
-- -- --
Drug_2 1 2.0584
Drug_2 0.1 1.0277
Drug_2 0.01 1.5696
-- -- --
#
split <- split(file,rep(1:35,each=10)) #### this will be used in the for loop
plot_list = list()
for(i in 1:length(split))
{
data <- split[[i]]
c <- data$conc
v <- data$viab
p = ggplot(data = data,aes(x=c,y=v))+geom_point()+ylim(0,1.5)+
scale_x_continuous(trans='log10')+
theme(axis.text = element_blank(),axis.title = element_blank()) +
geom_line(data=line_data, aes(x=x,y=y2),color ="red",size=1)
plot_list[[i]] = p
}
提前谢谢你!!
【问题讨论】:
-
aes()最适用于列名,而不是向量。试试改成aes(x = conc, y = viab) -
看看 facet_grid 能否解决您的问题,
-
成功了。现在 plot_list[i] 有所有的情节。我还找到了另一种方法。我使用 aes_string() 而不是 aes() 并且它也适用于矢量。有什么建议让网格单一图像?谢谢@GregorThomas
-
也许可以查看these answers。如果您遇到问题,请制作一个可重复的小示例(例如,可能 3 个图,每个图上有 1 或 2 个点,以及一个空白图),分享样本数据,展示您尝试过的方法,我们可以帮助您实现目标。
-
至于顺序,你需要在某个地方定义它。作为开始,我建议将
names()添加到您的plot_list,并获取您希望它们绘制的顺序的向量。但是该向量应该是列优先还是行优先,以及空白应该如何是否包含在内,将取决于情节组合解决方案。
标签: r loops for-loop ggplot2 plot