gpt4 book ai didi

r - 是否可以为绘图定义新的形状?

转载 作者:行者123 更新时间:2023-12-02 02:38:06 25 4
gpt4 key购买 nike

我从这里 ( http://sape.inf.usi.ch/quick-reference/ggplot2/shape ) 看到了一组可能的形状。如果我想定义新的形状,有可能吗?例如,假设我想使用一个具有可选填充美学的 7 边形多边形——有没有办法告诉 ggplot 该形状?

我觉得受到这组可能性的限制:

library(tidyverse)
dat <- tibble(p = c(0:25, 32:127),
x = p %% 16,
y = p %/% 16)
ggplot(dat, aes(x, y)) +
geom_text(aes(label = p), size = 3, nudge_y = -.25) +
geom_point(aes(shape = p), size = 5, fill = "red") +
scale_shape_identity() +
theme_void()

enter image description here

最佳答案

是的,可以通过多种方式之一来实现。除非您有可用的 7 边形的 svg 文件,否则一个快速的解决方案是将此形状定义为 grob并使用 geom_grob 绘制它来自包裹 ggpmisc .这使事物保持矢量格式。

创建七边形是困难的部分:

library(ggplot2)
library(dplyr)
library(grid)
library(ggpmisc)

# Make heptagon
septs <- seq(0, 2 * pi, length.out = 8)
devratio <- dev.size()[2]/dev.size()[1]
heptagon <- linesGrob(x = unit(0.5 + 0.2 * devratio * sin(septs), "npc"),
y = unit(0.5 + 0.2 * cos(septs), "npc"),
gp = gpar(lwd = 2))

情节本身很简单:

# Plot 10 random points with the heptagon
set.seed(69)

tibble(x = rnorm(10), y = rnorm(10), shape = list(heptagon)) %>%
ggplot() +
geom_grob(aes(x, y, label = shape))

enter image description here

从这个例子可以看出,自定义形状并不一定那么容易使用,因为形状必须由用户逐点定义,很难将其大小和线宽与现有点相匹配,并且用户将不得不定义他们的填充是什么/在哪里等。我不认为 ggplot 没有一个简单的界面来创建自定义形状是一个遗漏 - ggplot 对高级用户有很大的可扩展性,而且你不清楚你是否可以为初学者提供有用的形状创建界面。同时,除了最小众的应用程序之外,还有足够多的形状可以为所有应用程序提供信息图。

关于r - 是否可以为绘图定义新的形状?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64032845/

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