gpt4 book ai didi

R:使用 ggplot 创建自定义形状

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

完全披露:这也已发布到 ggplot2 邮件列表中。 (如果收到回复我会更新)

我对此有点迷失,我尝试过使用 geom_polygon 但连续的尝试似乎比前一次更糟糕。

我试图重新创建的图像是这样的,颜色不重要,但位置是:

enter image description here

除了创建它之外,我还需要能够用文本标记每个元素。

此时,我并不期待解决方案(尽管这将是理想的),但指针或类似的示例将非常有帮助。

我使用的一个选项是修改scale_shape并使用1,1作为坐标。但一直坚持添加标签。

我使用 ggplot 执行此操作的原因是因为我正在逐个公司生成记分卡。这只是其他绘图的 4 x 10 网格中的一个绘图(使用 PushViewport)

注意:金字塔的顶层也可以是类似大小的矩形。

最佳答案

这是我提出的解决方案。创建一系列多边形数据,并使用geom_polygon()来绘制它们。使用geom_text()绘制文本标签。

使用 cluster 包中的 ellipsoidhull() 创建椭圆。

您将需要通过删除图例、网格线、轴标签等来修改绘图美观性。

enter image description here

library(ggplot2)
library(cluster)

mirror <- function(poly){
m <- poly
m$x <- -m$x
m
}

poly_br <- data.frame(
x=c(0, 4, 3, 0),
y=c(0, 0, 1, 1),
fill=rep("A", 4)
)


poly_mr <- data.frame(
x=c(0, 3, 2, 0),
y=c(1, 1, 2, 2),
fill=rep("B", 4)
)

poly_tr <- data.frame(
x=c(0.5, 2, 1, 0.5),
y=c(2, 2, 3, 3),
fill=rep("C", 4)
)

poly_tm <- data.frame(
x=c(-0.5, 0.5, 0.5, -0.5),
y=c(2, 2, 3, 3),
fill=rep("D", 4)
)

poly_bl <- mirror(poly_br)
poly_ml <- mirror(poly_mr)
poly_tl <- mirror(poly_tr)


get_ellipse <- function(data, fill){
edata <- as.matrix(data)
ehull <- ellipsoidhull(edata)
phull <- as.data.frame(predict(ehull))
data.frame(
x=phull$V1,
y=phull$y,
fill=rep(fill, nrow(phull))
)
}

ellipse <- get_ellipse(
data.frame(
x=c(0, 2, 0, -2),
y=c(3, 3.5, 4, 3.5)
), fill="E"
)

text <- data.frame(
x=c(2, -2, 1.5, -1.5, 1.25, -1.25, 0, 0),
y=c(0.5, 0.5, 1.5, 1.5, 2.5, 2.5, 2.5, 3.5),
text=c("br", "bl", "mr", "ml", "tr", "tl", "tm", "ellipse"))


poly <- rbind(poly_br, poly_bl, poly_mr, poly_ml, poly_tr, poly_tm, poly_tl, ellipse)


p <- ggplot() +
geom_polygon(data=poly, aes(x=x, y=y, fill=fill), colour="black") +
geom_text(data=text, aes(x=x, y=y, label=text))
print(p)

关于R:使用 ggplot 创建自定义形状,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4917570/

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