【发布时间】:2019-03-17 15:12:14
【问题描述】:
我有一个大型数据框,其中每一列都包含一个高、低和高低。我也有一个 Base 专栏。我想为每组前缀创建一个图,以便折线图具有 A_H、A_L、A_HL 和 Base,然后对于所有其他匹配的前缀都相同。
date A_H B_H C_H D_H A_L B_L C_L D_L A_HL B_HL C_HL D_HL Base
2/1/18 6 4 6 4 2 3 5 8 9 2 3 5 3
2/2/18 2 4 7 6 5 8 3 9 11 12 5 9 5
2/3/18 8 6 8 9 6 9 7 9 13 13 6 7 5
我尝试了多种方法,但都没有奏效。
GraphList <- c("A", "B", "C", "D")
for (i in seq_along(GraphList)){
plot <- ggplot(df, aes(date)) +
geom_line(aes(y=Base, colour='Base')) +
geom_line(aes(y=paste0(i,"High"), colour='High')) +
geom_line(aes(y=paste0(i,"Low"), colour='Low')) +
geom_line(aes(y=paste0(i,"LS"), colour='LS'))
print(plot)
但是当我执行上述操作时,图表不会从列表中粘贴名称前缀,它只会在各自的图表中将 1H 和 1L、2H 和 2L 等作为平线吐出。
我也试过
plot <- ggplot(df, aes(date)) +
geom_line(aes(y=Base, colour='Base')) +
geom_line(aes(y=df[, grepl("_H", colnames(df))], colour='High')) +
geom_line(aes(y=df[, grepl("_L", colnames(df))], colour='Low')) +
geom_line(aes(y=df[, grepl("_LS", colnames(df))], colour='LS'))
print(plot)
使用这个方法我得到了错误
Don't know how to automatically pick the scale for object of type tbl_df/tbl/data.frame. Defaulting to continuous
Error: aesthetics must be either length 1 or the same as the data (63): y, colour, x
提前谢谢你。
【问题讨论】:
-
请通过包含充分代表您的实际数据的示例数据集(因为您说它很大)来解决您的问题reproducible。顺便说一句,我猜您应该通过将数据从宽格式转换为长格式来预处理数据,然后再将其传递给
ggplot()。 -
这个样本代表我的实际数据。实际数据仅包含更多日期和更多字母(即 A-CA)。从宽格式到长格式的预处理会做什么?
标签: r for-loop ggplot2 paste grepl