首页 > 解决方案 > 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,同时将firebricktwodash分配给Foo列,我将其命名为SomeWord。但是,根据我选择的名称,ggplot 会以错误的方式分配颜色和线型。例如,使用“Test1”作为名称似乎可以正常工作,但“Einschritt”会导致 ggplot2 将我的整个规则集扔出窗口。

我试过用谷歌搜索,但没有找到任何线索说明为什么 ggplot 似乎不接受某些名称,而其他名称则很好。我还想在颜色和线型参考名称中使用连字符,我认为这可能是一个问题。

编辑:作为一个例子,我刚刚尝试在我的虚拟数据框上复制它。使用上面发布的代码,当我使用以下名称时,线型和颜色匹配错误:

但是,当我切换到类似的东西时:

然后它们正确匹配。

标签: rggplot2

解决方案


“Ein-Schritt-Prognose”不能用作列名。请在您的问题下方查看我的评论。在 ggplot2 中,colnames 没有被引用,因此在 colname 中使用连字符会使它看起来像Ein - Schritt - Prognose(一个表达式)。在 R 中谨慎使用连字符。


推荐阅读