R ggplot2::geom_vline 图例未正确显示线型

Kim*_*Kim 1 r legend ggplot2

我正在尝试这个简单的任务,其中我希望向 ggplot 对象添加两条垂直线,具有不同的颜色和不同的线型,以及在图例中正确指定的颜色/线。我一直在看这篇文章,其中geom_vline绘制了两个 s 。如果您将其中一种线型更改为实线,图例将错误地显示线型。它将所有线条变成实心。

library(ggplot2)
library(ggthemes)
ggplot(aes(x = Sepal.Length), data = iris) + 
  geom_histogram(color = 'black', fill = NA) + 
  geom_vline(aes(xintercept = median(iris$Sepal.Length),
                 color = "median"), 
             linetype = "solid", size = 1) +
  geom_vline(aes(xintercept = mean(iris$Sepal.Length),
                 color = "mean"), 
             linetype = "dashed", size = 1) +
  scale_color_manual(
    name = "statistics", 
    values = c(median = "blue", mean = "red"))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我还简单地尝试了以下内容,没有添加任何数据:

library(ggplot2)
library(ggthemes)
ggplot() + theme_bw() + 
  geom_vline(aes(xintercept = c(0, 0.2), 
                 color = c("Zero", "Pooled")), 
             size = 1, linetype = c("solid", "dotdash")) +
scale_color_manual(
  name = "statistics", 
  values = c(Zero = "black", Pooled = "blue"))
Run Code Online (Sandbox Code Playgroud)

其中线型在图例上错误显示。

在此输入图像描述

谁能告诉我发生了什么以及如何让线型正确显示?

Mar*_*ius 5

您可以linetype输入aes像设置颜色一样进行调用

ggplot(aes(x = Sepal.Length), data = iris) + 
    geom_histogram(color = 'black', fill = NA) + 
    geom_vline(aes(xintercept = median(iris$Sepal.Length),
                   color = "median", linetype = 'median'), 
               size = 1) +
    geom_vline(aes(xintercept = mean(iris$Sepal.Length),
                   color = "mean", linetype = "mean"), 
               size = 1) +
    scale_color_manual(
        name = "statistics", 
        values = c(median = "blue", mean = "red")) +
    scale_linetype_manual(
        name = "statistics", 
        values = c(median = "solid", mean = "dashed"))
Run Code Online (Sandbox Code Playgroud)

当您指定哪个值与哪个线型匹配时使用命名向量也有帮助 - 我认为您的第二个示例失败的原因是在图例中, ggplot 按字母顺序将线型分配给级别。

输出:

在此输入图像描述

  • 您还应该删除“aes”内的“iris$”实例。 (2认同)