GGPLOT线图上有一个组的线

发布于 2025-02-08 21:39:03 字数 459 浏览 1 评论 0原文

我正在制作几个组的线图,并想进行可视化,其中一组线被突出显示

ggplot(df) + geom_line(aes(x=timepoint ,y=var, group = participant_id, color=color)) + 
  scale_color_identity(labels = c(red = "g1",gray90 = "Other"),guide = "legend")

,但是,组线被其他组线部分遮盖了

”

我如何才能始终使这些行始终在顶部上其他组线?

I am making a line plot of several groups and want to make a visualization where one of the groups lines are highlighted

ggplot(df) + geom_line(aes(x=timepoint ,y=var, group = participant_id, color=color)) + 
  scale_color_identity(labels = c(red = "g1",gray90 = "Other"),guide = "legend")

However, the group lines are partially obscured by the other groups lines

image

How can I make these lines always on top of other groups lines?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

相思碎 2025-02-15 21:39:03

最简单的方法是在不同层上绘制灰色和红色的群体。

首先,让我们尝试使用虚拟数据集复制问题:

set.seed(1)

df <- data.frame(
  participant_id = rep(1:50, each = 25),
  timepoint = factor(rep(0:24, 50)),
  var = c(replicate(50, runif(1, 50, 200) + runif(25, 0.3, 1.5) *
          sin(0:24/(0.6*pi))^2/seq(0.002, 0.005, length = 25))),
  color = rep(sample(c("red", "gray90"), 50, TRUE, prob = c(1, 9)), each = 100)
)

现在,我们应用您的绘图代码:

library(ggplot2)

ggplot(df) + 
  geom_line(aes(x=timepoint ,y=var, group = participant_id, color = color)) + 
  scale_color_identity(labels = c(red = "g1", gray90 = "Other"),
                       guide = "legend") +
  theme_classic()

>你的情节。相反,如果我们在不同的层中绘制,我们将获得:

ggplot(df, aes(timepoint, var, group = participant_id)) +
  geom_line(data = df[df$color == "gray90",], aes(color = "Other")) +
  geom_line(data = df[df$color == "red",], aes(color = "gl")) +
  scale_color_manual(values = c("red", "gray90")) +
  theme_classic()

“”

在2022-06-20创建的 reprex package (v2.0.1)

The simplest way to do this is to plot the gray and red groups on different layers.

First, let's try to replicate your problem with a dummy data set:

set.seed(1)

df <- data.frame(
  participant_id = rep(1:50, each = 25),
  timepoint = factor(rep(0:24, 50)),
  var = c(replicate(50, runif(1, 50, 200) + runif(25, 0.3, 1.5) *
          sin(0:24/(0.6*pi))^2/seq(0.002, 0.005, length = 25))),
  color = rep(sample(c("red", "gray90"), 50, TRUE, prob = c(1, 9)), each = 100)
)

Now we apply your plotting code:

library(ggplot2)

ggplot(df) + 
  geom_line(aes(x=timepoint ,y=var, group = participant_id, color = color)) + 
  scale_color_identity(labels = c(red = "g1", gray90 = "Other"),
                       guide = "legend") +
  theme_classic()

This looks broadly similar to your plot. If instead we plot in different layers, we get:

ggplot(df, aes(timepoint, var, group = participant_id)) +
  geom_line(data = df[df$color == "gray90",], aes(color = "Other")) +
  geom_line(data = df[df$color == "red",], aes(color = "gl")) +
  scale_color_manual(values = c("red", "gray90")) +
  theme_classic()

Created on 2022-06-20 by the reprex package (v2.0.1)

简单 2025-02-15 21:39:03

您可以使用因子重新启示,将感兴趣的线(-s)带到前线。

首先,让我们按原样绘制数据,其中红线部分被其他人隐藏。

library(ggplot2)
library(dplyr)
    
set.seed(13)
df <- 
      data.frame(timepoint = rep(c(1:100), 20),
             participant_id = paste0("p_", sort(rep(c(1:20), 100))),
             var = abs(rnorm(2000, 200, 50) - 200),
             color =  c(rep("red", 100), rep("gray90", 1900)))
    
ggplot(df) + 
  geom_line(aes(x = timepoint ,
    y = var, 
    group = participant_id, color = color)) + 
  scale_color_identity(labels = c(red = "g1", gray90 = "Other"),
    guide = "legend")

现在,让我们通过将P_1置于最后一个因素级别来将P_1置于前面。

    df %>% 
      mutate(participant_id = factor(participant_id)) %>% 
      mutate(participant_id = relevel(participant_id, ref = "p_1")) %>% 
      mutate(participant_id = factor(participant_id, levels = rev(levels(participant_id)))) %>%
      ggplot() + 
      geom_line(aes(x=timepoint, 
y=var, 
group = participant_id, 
color = color)) + 
      scale_color_identity(labels = c(red = "g1", gray90 = "Other"), 
guide = "legend")

You can use factor releveling to bring the line (-s) of interest to front.

First, let's plot the data as is, with the red line partly hidden by others.

library(ggplot2)
library(dplyr)
    
set.seed(13)
df <- 
      data.frame(timepoint = rep(c(1:100), 20),
             participant_id = paste0("p_", sort(rep(c(1:20), 100))),
             var = abs(rnorm(2000, 200, 50) - 200),
             color =  c(rep("red", 100), rep("gray90", 1900)))
    
ggplot(df) + 
  geom_line(aes(x = timepoint ,
    y = var, 
    group = participant_id, color = color)) + 
  scale_color_identity(labels = c(red = "g1", gray90 = "Other"),
    guide = "legend")

wrong line plot

Now let's bring p_1 to front by making it the last factor level.

    df %>% 
      mutate(participant_id = factor(participant_id)) %>% 
      mutate(participant_id = relevel(participant_id, ref = "p_1")) %>% 
      mutate(participant_id = factor(participant_id, levels = rev(levels(participant_id)))) %>%
      ggplot() + 
      geom_line(aes(x=timepoint, 
y=var, 
group = participant_id, 
color = color)) + 
      scale_color_identity(labels = c(red = "g1", gray90 = "Other"), 
guide = "legend")

correct line plot

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文