r - ggplot2错误地分配美学
问题描述
我正在用 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 现在会正确地将 color steelblue和linetype solid分配给列Value,同时将firebrick和twodash分配给Foo列,我将其命名为SomeWord。但是,根据我选择的名称,ggplot 会以错误的方式分配颜色和线型。例如,使用“Test1”作为名称似乎可以正常工作,但“Einschritt”会导致 ggplot2 将我的整个规则集扔出窗口。
我试过用谷歌搜索,但没有找到任何线索说明为什么 ggplot 似乎不接受某些名称,而其他名称则很好。我还想在颜色和线型参考名称中使用连字符,我认为这可能是一个问题。
编辑:作为一个例子,我刚刚尝试在我的虚拟数据框上复制它。使用上面发布的代码,当我使用以下名称时,线型和颜色匹配错误:
- 列“值”的“值”,列 Foo 的任何内容。
- “值”列的“Ein-Schritt-Prognose”,Foo 列的任何内容。
- 列“值”的“SomeWord”,列 Foo 的任何内容。
但是,当我切换到类似的东西时:
- “ABD”表示值列,任何表示 Foo 列。
然后它们正确匹配。
解决方案
“Ein-Schritt-Prognose”不能用作列名。请在您的问题下方查看我的评论。在 ggplot2 中,colnames 没有被引用,因此在 colname 中使用连字符会使它看起来像Ein - Schritt - Prognose
(一个表达式)。在 R 中谨慎使用连字符。
推荐阅读
- google-calendar-api - 谷歌日历 API grantOfflineAccess() 没有弹出
- r - 无论列顺序如何,计算所有可能的组合
- validation - 时间字段中的 XPAGE validateexpression 问题
- matlab - 创建一个估计 e 并概述误差的 MATLAB 函数
- java - 使用 JVM 将堆保存到文件后,标量替换对象的重新分配失败
- javascript - 计算具有不同 id 和名称 attr 的动态创建的文本区域的字符
- xml - 未解决的参考:合成
- java - 如何填充动态列表 Java
- c# - 在 WPF 应用程序中使用 Net Driver 查询 Neo4j 并返回找到的节点
- sql - 使用 nvarchar(MAX) 的索引与基于具有固定字符的 nvarchar 的索引的性能?