这是您应该始终确保具有有效的列名称的一个很好的理由。首先,这是一个更容易重现的数据集版本
df2 <- data.frame(`Sum of MAE` = c(0.030156758080105, 0.0600065426668421,
0.0602272459239397, 0.0704327240953608, 0.09, 0.0900000000000001,
0.104746328560384, 0.106063964745531, 0.108373386847075, 0.110086738825851
), Company = c("COCO", "APWC", "EDS", "FREE", "VLYWW", "IKAN", "SPU", "ELON",
"WTSL", "MTSL"), check.names=F)
ggplot(df2, aes_string("Sum of MAE", "Company", group=1) + geom_line())
# Error in parse(text = x) : <text>:1:5: unexpected symbol
# 1: Sum of
# ^
问题是aes_string()
uses parse()
将文本表达式转换为可以在 data.frame 中解析的正确 R 符号。当您解析“Sum of MAE”时,这不是有效的 R 语法 - 也就是说,它不会解析为单个好的符号名称。如果您使用这样的“坏”名称,您可以使用反引号转义它们,将表达式(空格和所有)视为符号。所以你可以做
ggplot(df2, aes_string("`Sum of MAE`", "Company", group=1)) + geom_line()
# or
ggplot(df2, aes(`Sum of MAE`, Company, group=1)) + geom_line()
但实际上,最好坚持为 data.frame 使用有效的列名称,而不是绕过 colnames() 的检查。
如果您要更改列名称以获得“更好”的轴标签,您可能应该这样做xlab()
反而。例如
df3 <- data.frame(df2)
names(df3)
# [1] "Sum.of.MAE" "Company"
ggplot(df3, aes(Sum.of.MAE, Company, group=1)) +
geom_line() +
xlab("Sum of MAE values")