gpt4 book ai didi

r - 使用scale_size_area,从顶部和底部添加线条到下一个区域点

转载 作者:行者123 更新时间:2023-12-01 18:59:57 24 4
gpt4 key购买 nike

这个标题很不巧妙,但让我解释一下。我的目标是从大“Hold”圆圈的顶部(12:00)到“Back”圆圈的顶部(12:00)有一条线,依此类推。然后还有一条从大圆圈底部 (6:00) 到下一个大圆圈底部的线,依此类推。是否可以在不手动放置线段的情况下添加此类线?谢谢。

# example data frame
df <- data.frame(Documents = c(1.5e5, .6e5, .3e5, .1e5), stages = c("Hold", "Back", "Trust", "Camp"), x = c(12, 18, 25, 35), y = c(10, 8, 7, 6))

library("ggplot2")
library(ggthemes)
ggplot(df, aes(x = x, y = y, size = Documents)) +
geom_point(color = "grey30", alpha = 0.3) + theme_tufte() +
scale_size_area(max_size = 35) +
geom_text(aes(label = stages), size = 6, color = "red") +
theme(axis.text = element_blank()) +
labs(x = "", y = "", fill = "Documents") +
theme(legend.position = "bottom") +
xlim(8, 38) + ylim(5, 13)

enter image description here

最佳答案

这里尝试采用 ggplot 生成的绘图,然后在视口(viewport)内绘制与 ggplot 绘图面板具有相同比例的线条。我认为 ggplot 的内部数据给出了以点为单位的圆的大小。我认为这是圆的半径。因此,为了获得圆的顶部和底部,我需要将“本地”单位与“点”单位相加和减去。我不知道如何在 ggplot 中做到这一点,但可以在 grid 中完成;因此就有了视口(viewport)。

但是您会注意到,这些线(和点)并不完全位于所有圆的圆周上 - 不确定原因。

我对两个轴上的 ggplot - expand = c(0,0) 做了一个小小的更改,以便视口(viewport)可以具有与绘图面板相同的比例。

# example data frame
df <- data.frame(Documents = c(1.5e5, .6e5, .3e5, .1e5), stages = c("Hold", "Back", "Trust", "Camp"), x = c(12, 18, 25, 35), y = c(10, 8, 7, 6))

library("ggplot2")
library(ggthemes)
library(grid)

p = ggplot(df, aes(x = x, y = y, size = Documents)) +
geom_point(color = "grey30", alpha = 0.3) + theme_tufte() +
scale_size_area(max_size = 35) +
geom_text(aes(label = stages), size = 6, color = "red") +
theme(axis.text = element_blank()) +
labs(x = "", y = "", fill = "Documents") +
theme(legend.position = "bottom") +
scale_x_continuous(limits = c(8,38), expand = c(0,0)) +
scale_y_continuous(limits = c(5,13), expand = c(0,0))

p

# Get the size of the dots from ggplot's internal data.
# I think "size" is radius in "pts".
g = ggplot_build(p)
df$size = g$data[[1]]$size

# Set up viewport for the plot panel
current.vpTree() # Find the plot panel
downViewport("panel.6-4-6-4")

# Set up scales in the plot panel - see "limits" in ggplot
pushViewport(dataViewport(yscale = c(5,13), xscale = c(8,38)))

# Draw points and lines
grid.points(x = unit(df$x, "native"), y = unit(df$y, "native") + unit(df$size, "pt"), pch = 19, gp = gpar(col = "blue", cex = .5), default.units = "native")
grid.points(x = unit(df$x, "native"), y = unit(df$y, "native") - unit(df$size, "pt"), pch = 19, gp = gpar(col = "blue", cex = .5), default.units = "native")
grid.lines(x = unit(df$x, "native"), y = unit(df$y, "native") + unit(df$size, "pt"), gp = gpar(col = "blue", lwd = 2), default.units = "native")
grid.lines(x = unit(df$x, "native"), y = unit(df$y, "native") - unit(df$size, "pt"), gp = gpar(col = "blue", lwd = 2), default.units = "native")

popViewport()
popViewport()
popViewport()

enter image description here

关于r - 使用scale_size_area,从顶部和底部添加线条到下一个区域点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29909182/

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