R 箱线图的图例自定义

R 箱线图的图例自定义,r,ggplot2,legend,boxplot,R,Ggplot2,Legend,Boxplot,我有这个箱线图,然后我试图在它上面画两个不同的点,不同的颜色,这样用户可以看到它们落在箱线图上的位置,并相互比较。问题是,我希望图例显示两个具有相应颜色的点及其ID。相反,图例显示箱线图类别/颜色。如何覆盖图例以仅显示所需内容?这是我的密码: library(datasets) library(ggplot2) data(airquality) airquality$Month <- factor(airquality$Month, labe

我有这个箱线图,然后我试图在它上面画两个不同的点,不同的颜色,这样用户可以看到它们落在箱线图上的位置,并相互比较。问题是,我希望图例显示两个具有相应颜色的点及其ID。相反,图例显示箱线图类别/颜色。如何覆盖图例以仅显示所需内容?这是我的密码:

library(datasets)
library(ggplot2)

data(airquality)
airquality$Month <- factor(airquality$Month,
                       labels = c("May", "Jun", "Jul", "Aug", "Sep"))
airquality$ID <-seq(1:nrow(airquality))
dataPoint <- airquality[11,]
dataPoint2 <- airquality[17,]
plt <- ggplot(airquality, aes(x = Month, y = Ozone, color = Month)) +
  geom_boxplot(show.legend=TRUE,outlier.shape = NA) +
  geom_point(data = dataPoint, color='darkblue', aes(x = Month, y =    Ozone), size = 3,show.legend=TRUE) +
  geom_point(data = dataPoint2, color='darkred', aes(x = Month, y = Ozone), size = 3,show.legend=TRUE) +
  theme(legend.position = "bottom")
plt

我将通过将这些点映射到不同的美学来实现这一点。如果在这种情况下show.legend设置为FALSE,则图例将单独显示。您还可以映射到点形状或任何其他美学效果。或者,可以映射箱线图几何图形的填充,并映射点几何图形的颜色

例如:

library(datasets)
library(ggplot2)

data(airquality)
airquality$Month <- factor(airquality$Month,
                       labels = c("May", "Jun", "Jul", "Aug", "Sep"))
airquality$ID <-seq(1:nrow(airquality))
points <- c(11, 17)
airquality$Points <- NA
airquality$Points[points] <- c("Point a", "Point b")
plt <- ggplot(airquality, aes(x = Month, y = Ozone, color = Month)) +
  geom_boxplot(outlier.shape = NA) +
  geom_point(data = airquality[!is.na(airquality$Points), ], 
  mapping=aes(x = Month, y = Ozone, fill = Points), size = 3, shape = 21, inherit.aes=FALSE) +
  theme(legend.position = "bottom")
plt

我将通过将这些点映射到不同的美学来实现这一点。如果在这种情况下show.legend设置为FALSE,则图例将单独显示。您还可以映射到点形状或任何其他美学效果。或者,可以映射箱线图几何图形的填充,并映射点几何图形的颜色

例如:

library(datasets)
library(ggplot2)

data(airquality)
airquality$Month <- factor(airquality$Month,
                       labels = c("May", "Jun", "Jul", "Aug", "Sep"))
airquality$ID <-seq(1:nrow(airquality))
points <- c(11, 17)
airquality$Points <- NA
airquality$Points[points] <- c("Point a", "Point b")
plt <- ggplot(airquality, aes(x = Month, y = Ozone, color = Month)) +
  geom_boxplot(outlier.shape = NA) +
  geom_point(data = airquality[!is.na(airquality$Points), ], 
  mapping=aes(x = Month, y = Ozone, fill = Points), size = 3, shape = 21, inherit.aes=FALSE) +
  theme(legend.position = "bottom")
plt

绘制这样的图形的最简单方法是:

使用rbind组合数据点数据集。这样,您只需调用一个geom_点 对于箱线图,使用填充而不是颜色 使用“缩放颜色”手册定义点颜色 代码:

# Combine datasets
dataPoints <- rbind(dataPoint, dataPoint2)

# Plot
ggplot(airquality, aes(Month, Ozone, fill = Month)) +
    geom_boxplot(outlier.shape = NA) +
    geom_point(data = dataPoints, 
               aes(Month, Ozone, color = factor(ID)), 
               size = 3) +
    labs(color = "ID",
         fill = "Month") +
    scale_color_manual(values = c("darkblue", "darkred")) +
    theme(legend.position = "bottom")

绘制这样的图形的最简单方法是:

使用rbind组合数据点数据集。这样,您只需调用一个geom_点 对于箱线图,使用填充而不是颜色 使用“缩放颜色”手册定义点颜色 代码:

# Combine datasets
dataPoints <- rbind(dataPoint, dataPoint2)

# Plot
ggplot(airquality, aes(Month, Ozone, fill = Month)) +
    geom_boxplot(outlier.shape = NA) +
    geom_point(data = dataPoints, 
               aes(Month, Ozone, color = factor(ID)), 
               size = 3) +
    labs(color = "ID",
         fill = "Month") +
    scale_color_manual(values = c("darkblue", "darkred")) +
    theme(legend.position = "bottom")

和问题无关,但若你们的x轴是连续的,我会把调色板从离散的换成更好的,和问题无关,但若你们的x轴是连续的,我会把调色板从离散的换成更好的谢谢!这对于我做的测试用例是有效的,但是这里有一个问题。上面我所画的原始图有不同颜色的线条图,中间没有填充白色。这就是我需要展示它们的方式。现在,如果geom_point和geom_boxplot都对不同的颜色使用颜色,那么我不能通过guidesfill=FALSE删除图例的第二部分。关于如何解决这个问题有什么建议吗?@AnyaR在geom_point中这样做:geom_pointdata=dataPoints,aesaesMonth,Ozone,fill=factorID,shape=21。对于主ggplot,将填充=月份更改为颜色=月份。这里我们将填充改为颜色。让我知道进展如何。非常感谢!这成功了!我几乎是自己弄明白的,但如果没有shape=21,积分就会变黑,无视我的填充说明。这个小细节真的很有用,谢谢!:你有没有可能向我推荐如何在相同颜色的情况下制作不同形状的两点?。我试着用shape=c15,17-表示正方形和三角形,但这似乎不起作用再次挑战,我要在图例中展示这两种不同的形状-在ID旁边。提前谢谢@不管怎样,我编辑了我的答案,请让我知道,如果有什么我可以帮助你:-谢谢!这对于我做的测试用例是有效的,但是这里有一个问题。上面我所画的原始图有不同颜色的线条图,中间没有填充白色。这就是我需要展示它们的方式。现在,如果geom_point和geom_boxplot都对不同的颜色使用颜色,那么我不能通过guidesfill=FALSE删除图例的第二部分。关于如何解决这个问题有什么建议吗?@AnyaR在geom_point中这样做:geom_pointdata=dataPoints,aesaesMonth,Ozone,fill=factorID,shape=21。对于主ggplot,将填充=月份更改为颜色=月份。这里我们将填充改为颜色。让我知道进展如何。非常感谢!这成功了!我几乎是自己弄明白的,但如果没有shape=21,积分就会变黑,无视我的填充说明。这个小细节真的很有用,谢谢!:你有没有可能向我推荐如何在相同颜色的情况下制作不同形状的两点?。我试着用shape=c15,17-表示正方形和三角形,但这似乎不起作用再次挑战,我要在图例中展示这两种不同的形状-在ID旁边。提前谢谢@不管怎样,我编辑了我的答案,如果还有什么我可以帮助你的,请告诉我:-