基于迭代循环变量的ggplot2绘图标题

4
我希望能够用for循环中的变量(k)为每个图表命名标题:
> MyData
     Name Stat Year value
1  Site01  Max 2013 29.88
2  Site01  Med 2013 29.67
3  Site01  Min 2013 29.16
4  Site01  Max 2020 31.21
5  Site01  Med 2020 30.38
6  Site01  Min 2020 29.38
7  Site01  Max 2040 35.50
8  Site01  Med 2040 33.17
9  Site01  Min 2040 29.60
10 Site02  Max 2013 53.70
11 Site02  Med 2013 53.49
12 Site02  Min 2013 53.20
13 Site02  Max 2020 53.10
14 Site02  Med 2020 53.01
15 Site02  Min 2020 52.55
16 Site02  Max 2040 52.04
17 Site02  Med 2040 51.74
18 Site02  Min 2040 50.98

pdf("plots.pdf")
for (k in unique(MyData$Name)){
subdata <- subset(MyData, Name == k)

     print(ggplot(subdata, aes(x = Year, y = value, colour = Stat)) 
          + geom_line() + expand_limits(y=c(0,100)) + ggtitle(k))

}
dev.off()

当使用字符串作为ggtitle()(例如:ggtitle("Name"))或完全删除ggtitle()时,图形生成得很好。

如何在每个图形的标题中包含迭代变量(k)的值?有什么建议吗?


2
请阅读以下内容:(1)如何提出一个好问题,(2)如何创建一个MCVE,以及(3)如何在R中提供一个最小可重现的示例。然后相应地编辑和改进您的问题。例如,提供一些输入数据(例如来自R的示例集),以便可以复制、粘贴和运行您的代码。 - lukeA
我编辑了一个数据示例集(实际上运行良好!),因此我的大量代码中必须存在问题。 - viridius
如果你无法重现问题,那么帮助你将会非常困难。你的数据与样本有何不同?你所遇到的问题具体是什么?是否出现了错误?是否在任何图表上绘制了任何内容? - MrFlick
在实现我的完整代码/输入数据集时,问题仍然存在。根据下面的答案建议,使用ggtitle(as.character(k))后问题得到解决。 - viridius
为什么不使用 ggplot(subdata, aes(x = Year, y = value, colour = Stat, group=Name)) + geom_line() + expand_limits(y=c(0,100)) + facet_wrap(~Name),而不是使用 for 循环呢? - Adam Quek
2个回答

2

MyData$Name中的数据属于哪个类别?

尝试将ggtitle(k)替换为ggtitle(as.character(k)),以确保您向ggtitle传递一个字符串。


你是否真的能够重现原始问题?你的说法是 k 是数字吗?OP提供的代码对我来说似乎完全正常。我不确定这个修复解决了什么问题。 - MrFlick
抱歉,问题表述不够清晰。MyData$Name是字符串。 - viridius
@MrFlick 最初没有数据示例,因此可能是错误的类引起了问题。 - conor
@user3830407 在这种情况下你应该格外小心。请仔细检查 unique(MyData$Name) 中每个元素的类别,因为在强制转换后,可能会出现一些意外的结果,这不是你原先预期的。 - conor
@conor 感谢您提醒的话。我已经查看了PDF输出,一切看起来都很好。图表标题显示的站点名称也符合我的预期。在完成脚本之前,我会保持警惕。 - viridius
显示剩余3条评论

1
您可以使用paste(),例如:
ggtitle(paste(your_value))

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