1

我对 R 很陌生,我希望在我的情节中使用gghighlight. 例如,我想只用红色突出显示第 16 组和第 32 组,而将其余行保留为灰色。我当前的代码和输出如下。我似乎无法突出显示特定组,我只能为所有线条添加颜色。我试图gghighlight(grp==16)尝试突出显示 16,但它显示“尝试使用 计算group_by(),但计算失败”。

示例数据

library(readxl)
library(ggplot2)
library(gghighlight)

guidelines <- read_excel("data.xlsx", sheet=1)
guidelines$step <- factor(guidelines$step, levels=c("First", "Highest", "Final"))

map <- ggplot(guidelines,
              aes(x = step, y = type, group = grp, color = factor(grp))) +
scale_color_hue(l=45) +
geom_line(linetype = 1) +
geom_line(position=position_jitter(w=0, h=0.05)) 


map + scale_y_continuous(breaks = c(1,2,3,4))
map + scale_y_continuous(breaks = c(1,2,3,4),
                         labels = c("Method 1", "Method 2", "Method 3", "Method 4"))

在此处输入图像描述

4

1 回答 1

0

我试着按照你的方式做了以下事情。我不熟悉gghighlight()。我快速浏览了一下,认为您需要使用逻辑检查来突出显示某些组。如果您可以设置逻辑检查,我认为您可以使用该功能。在您的问题中,您只是提到要突出显示特定组。您可以采取的一种方法是使用scale_color_identity(). 我在下面创建了一个示例数据。我基本上分配red到三个组(即1、3、5)mutate()。其他组进入gray50列,color

library(tidyverse)

guidelines <- tibble(step = rep(c("First", "Highest", "Final"), times = 5),
                     type = c(2, 4, 4, 2, 4, 4, 4, 4, 4, 2, 4, 2, 1, 3, 3),
                     grp = rep(1:5, each = 3))

mutate(guidelines,
       step = factor(step, levels = c("First", "Highest", "Final")),
       color = if_else(grp %in% c(1, 3, 5), "red", "gray50")) -> guidelines


ggplot(data = guidelines, aes(x = step, y = type, color = color, group = grp)) +
geom_line(linetype = 1, position = position_jitter(w = 0, h = 0.05)) +
scale_color_identity(guide = "legend", labels = c("Other groups", "Group 1, 3, 5")) +
scale_y_continuous(breaks = c(1,2,3,4),
                   labels = c("Method 1", "Method 2", "Method 3", "Method 4"))

在此处输入图像描述

gghighlight 的潜在解决方案

我没有你的数据。所以这个想法可能/可能行不通。但我想出了以下想法。我又修改guidelines了一次。我创建了一个新的连续变量(即虚拟变量),用于 x 轴。这有点扭曲,因为我们应该在轴上有一个分类变量。但是,如果您想使用gghighlight. 据我了解gghighlight,我们需要在函数中进行逻辑检查。在这里,我想突出显示最大值为 3 的行。这突出显示了第 5 组。由于您想要有两个分类变量,我们必须修改 x 和 y 轴上的名称。如果您可以为数据中的两组(16 和 32)设置逻辑检查,我相信您可以使用这个想法。

library(gghighlight)

mutate(guidelines,
       dummy = recode(.x = step, First = 1, Highest = 2, Final = 3),
       step = factor(step, levels = c("First", "Highest", "Final")),
       color = if_else(grp %in% c(1, 3, 5), "red", "gray50")) -> guidelines

ggplot(data = guidelines, aes(x = dummy, y = type, color = color, group = grp)) +
geom_line(size = 2, linetype = 1) +
gghighlight(max(as.numeric(type)) == 3, label_key = grp) +
labs(x = "Step", y = "Type") +
scale_x_continuous(breaks = c(1,2,3),
                   labels = c("First", "Highest", "Final")) +
scale_y_continuous(breaks = c(1,2,3,4),
                   labels = c("Method 1", "Method 2", "Method 3", "Method 4"))

在此处输入图像描述

于 2020-02-10T03:23:48.523 回答