gpt4 book ai didi

r - 在 ggplot 中,如何创建带有尖边(如 "toothpicks")的线条可视化?

转载 作者:行者123 更新时间:2023-12-04 11:51:35 26 4
gpt4 key购买 nike

我正在寻找一种使用 ggplot() 创建线条的方法具有“尖”边缘,以获得“牙签”的整体外观。
例如,考虑以下可视化:

library(tibble)
library(ggplot2)

my_df <-
tribble(~name, ~value,
"a", 1,
"a", 2,
"b", 1,
"b", 2)


my_df %>%
ggplot(aes(x = name, y = value)) +
geom_line(size = 1.5, lineend = "round") +
expand_limits(y = c(0.5, 2.5)) +
theme_bw()

创建于 2021-07-21 由 reprex package (v2.0.0)

现在,假设我设置了
y_top    <- 1.75
y_bottom <- 1.25
作为线条开始“锐化”的值。

我怎样才能得到类似的东西:

thoothpicks
虽然也有淡出效果是理想的,但“牙签”外观对我来说是最重要的。不幸的是, geom_lines()lineend论点不支持我正在寻找的“重点”。
知道如何实现这一目标吗?
谢谢!

最佳答案

一种方法是使用 ggforce包访问一些“补间”几何体,它们的外观沿其长度变化,例如 geom_link2 .在这里,我做了一些准备工作,为每个名称添加距离极端值 0.25 英寸的观察值,并根据我们是否处于极端值来分配宽度。

library(tidyverse); library(ggforce)
my_df %>%
group_by(name) %>%
summarize(min_val = min(value), max_val = max(value)) %>%
mutate(min_taper = min_val + 0.25, max_taper = max_val - 0.25) %>%
pivot_longer(-name, names_to = "step") %>%
mutate(width = if_else(str_detect(step, "val"), 0, 1)) %>%
arrange(name, value) %>%

#Here's what it looks like at this point:
## A tibble: 8 x 4
# name step value width
# <chr> <chr> <dbl> <dbl>
#1 a min_val 1 0
#2 a min_taper 1.25 1
#3 a max_taper 1.75 1
#4 a max_val 2 0
#5 b min_val 1 0
#6 b min_taper 1.25 1
#7 b max_taper 1.75 1
#8 b max_val 2 0

# now that it's prepped, it's a short call in ggplot2/ggforce:
ggplot(aes(name, value, size = width)) +
ggforce::geom_link2() +
scale_size_continuous(range = c(0,0.6)) + # controls width range of lines
theme_bw()
enter image description here

关于r - 在 ggplot 中,如何创建带有尖边(如 "toothpicks")的线条可视化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68474591/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com