提问人:MattS5000 提问时间:8/15/2023 最后编辑:stefanMattS5000 更新时间:8/15/2023 访问量:104
使用 ggplot2,有没有办法在使用多线绘图设计时只标记一条线的绘图点?
With ggplot2, is there a way to only label plot points of one line when using a multi-line plot design?
问:
我使用 ggplot 在图形上绘制了 2 条线,特别是使用“选择”和“收集”工具使用此方法将两个线变量折叠成键值对(此处为解决方案 2): https://www.datanovia.com/en/blog/how-to-create-a-ggplot-with-multiple-lines/
一切正常,除了我无法弄清楚如何使用“Desc”变量标记一条线的点。下面的代码使用 Desc 变量标记这两条线,但我只想标记“elevation”线。有什么想法吗?
#preparing data
library("tidyverse")
df <- mydatacsv %>%
select(Meter, Stem_Height,Elevation,Desc) %>%
gather(key = "Legend", value = "value", -Meter,-Desc)
head(df,n=200)
# Visualization
ggplot(df, aes(x = Meter, y = value,label=Desc)) +
geom_line(aes(color = Legend)) +
scale_color_manual(values = c("green4","black")) +
geom_point(data=mydatacsv, aes(y = Stem_Height),color="green4")+
geom_point(data=mydatacsv, aes(y = Elevation),color="black")+
xlab("Distance (m)") +
ylab("Elevation (m)")+
geom_text_repel(max.overlaps=Inf,hjust=-0.1, angle=90)
我想要绘制两条线,其中一条线的绘图点标签。取而代之的是,它在图形上放置双标签,每条线上的每个绘图点一个标签。
答:
2赞
I_O
8/15/2023
#1
您只能通过至少三种方式标记所需的组。
使用示例数据并绘制每个级别的 vs,但仅标记具有三个档位的汽车的观测值:mtcars
hp
mpg
gear
- 根据 Gear 的值设置标签文本:
mtcars |>
ggplot() +
geom_text(aes(hp, mpg, label = ifelse(gear == 3, mpg, NA)))
- 为标注层提供其自己的数据子集:
mtcars |>
ggplot() +
geom_text(data = mtcars |> filter(gear == 3),
aes(hp, mpg, label = mpg)
)
- 将不需要的标签的(不透明度)设置为零:
alpha
mtcars |>
ggplot() +
geom_text(aes(hp, mpg, label = mpg, alpha = gear == 3)) +
scale_alpha_identity()
0赞
Rui Barradas
8/15/2023
#2
由于您正在使用包,因此请更改您不想更改的标签或空白。两者中的任何一个都会删除一行的标签,将发出警告。
我假设你有长格式的数据。尽管您在问题代码的开头对其进行了重塑,但您将其绘制得好像不是一样。tidyverse
NA
""
NA
suppressPackageStartupMessages({
library(dplyr)
library(ggplot2)
library(ggrepel)
})
# reproducible test data
set.seed(2023)
df1 <- replicate(2, cumsum(rnorm(20))) |> as.data.frame()
df1$Legend <- rep(c("A", "B"), each = 10L)
df1$Desc <- with(df1, ave(V1, Legend, FUN = \(x) paste("text", seq_along(x))))
names(df1)[1:2] <- c("Meter", "value")
head(df1)
#> Meter value Legend Desc
#> 1 -0.08378436 -0.4116530 A text 1
#> 2 -1.06672810 -0.7059802 A text 2
#> 3 -2.94179542 0.5125938 A text 3
#> 4 -3.12794008 0.7567052 A text 4
#> 5 -3.76142578 0.3115533 A text 5
#> 6 -2.67062832 -1.5362504 A text 6
df1 %>%
# mutate(Desc = ifelse(Legend == "A", Desc, NA_character_)) %>%
mutate(Desc = ifelse(Legend == "A", Desc, "")) %>%
ggplot(aes(Meter, value, color = Legend, label = Desc)) +
geom_line() +
geom_point() +
geom_text_repel(max.overlaps=Inf,hjust=-0.1, angle=90) +
scale_color_manual(values = c("green4", "black")) +
xlab("Distance (m)") +
ylab("Elevation (m)") +
theme_bw()
创建于 2023-08-14 使用 reprex v2.0.2
下一个:来自单个长字符串的多行正则表达式
评论