【发布时间】:2019-07-04 07:27:56
【问题描述】:
我正在使用 ggplot2 创建绘图,由于某种原因,该函数的行为非常奇怪。
我有一个数据框 df,我想可视化几列。
任何数据框似乎都可以正常工作。我已经生成了这个虚拟数据框。
df <- data.frame(Date = seq.Date(as.Date.character("2019-01-01"), by = 1, length.out = 10),
Value = rnorm(10),
Foo = rnorm(10))
所以我要做的是
library(ggplot2)
gg <- ggplot(df, aes(x = Date)) + geom_line(aes(y = Value, color = "Value", linetype = "Value"))
gg <- gg + geom_line(aes(y = Foo, color = "SomeWord", linetype = "SomeWord"))
gg <- gg + scale_color_manual(name="Legend",
breaks=c("Value", "SomeWord"), values=c("steelblue", "firebrick")) +
scale_linetype_manual(name="Legend",
breaks=c("Value", "SomeWord"), values=c("solid", "twodash"))
gg
通常,ggplot2 现在会正确地将颜色 steelblue 和线型 solid 分配给列 Value,同时分配 firebrick 和 twodash 到 Foo 列,我将其命名为 SomeWord。但是,根据我选择的名称,ggplot 会以错误的方式分配颜色和线型。例如,使用“Test1”作为名称似乎可以正常工作,但“Einschritt”会导致 ggplot2 将我的整个规则集扔出窗口。
我试过用谷歌搜索,但没有找到任何线索说明为什么 ggplot 似乎不接受某些名称,而其他名称则很好。我还想在颜色和线型参考名称中使用连字符,我认为 可能 是个问题。
编辑:例如,我刚刚尝试在我的虚拟数据框上复制它。使用上面发布的代码,当我使用以下名称时,线型和颜色匹配错误:
- 列“值”的“值”,列 Foo 的任何内容。
- “值”列的“Ein-Schritt-Prognose”,Foo 列的任何内容。
- “值”列的“SomeWord”,Foo 列的任何内容。
但是,当我切换到类似的东西时:
- “ABD”用于列 Value,任何用于列 Foo。
那么它们就被正确匹配了。
【问题讨论】:
-
一些有趣的阅读 :-) how to make a great r reproducible example
-
连字符在 R 中被认为是减号。如果您在输入文件的列名中包含点,它们会自动替换为点。
-
@J.Grünenwald:我认为您仍然需要修改您的代码以使其“可运行”。即转到fun reading post 中的第 2 项 :-)
-
不确定是否有帮助,但请阅读
?scale_*_manuel中关于values参数的信息:一组将数据值映射到的美学值。如果这是一个命名向量,则将根据名称匹配值。 如果未命名,值将按顺序(通常按字母顺序)与刻度限制匹配。任何不匹配的数据值都将被赋予 na.value。 -
@markus 谢谢!这正是我一直在寻找的。看来我还没有完全理解 scale__manual 功能是如何工作的。我认为 values 中给出的属性是根据 breaks 参数中给出的值匹配的。然而,这似乎是完全错误的。我得查一下。再次感谢您!