gpt4 book ai didi

r - 使用 geom_hex 以编程方式查找比例填充范围

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

所以我制作了两个六角网格图,我想给颜色填充相同的范围,这样任何给定的颜色在两个图上都意味着相同的东西。但是,要设置范围,我必须在查看两个图后手动输入我看到的上限范围。我希望能够以编程方式获取两个(或更多)绘图之间的任何十六进制网格中的最大(和最小)计数,并将其设置为范围,而不是手动进行。

我减少了我的代码以仅生成一个十六进制网格图并删除了我的自定义主题。数据来自拉赫曼

library(Lahman)
library(tidyverse)
library(viridis)

gg_base_runs <- ggplot(Teams, aes(y = R)) +
scale_fill_viridis(begin = 0, end = .9, option = "C", limit = range(c(1,150))) +
coord_cartesian(xlim = c(0,1750)) +
labs(y = "Runs")

(gg_runs_BB_hex <- gg_base_runs +
aes(x = BB) +
labs(x = "Walks") +
geom_hex())

Current plot

最佳答案

在这种情况下,我通常会在 ggplot 之外计算计数值,以便找到计数范围。但在这种情况下,使用 ggplot_build 直接从每个绘图对象中提取计数值可能更容易。一旦我们有了每个地 block 的计数,我们就可以找到所有地 block 的计数范围。然后可以使用此范围在 scale_fill_viridis 中为所有绘图设置相同的限制。这是一个例子:

library(ggplot2)
library(Lahman)
library(tidyverse)
library(viridis)

首先,我们在不调用 scale_fill_viridis 的情况下重新创建您的绘图:

gg_base_runs <- ggplot(Teams, aes(y = R)) +
coord_cartesian(xlim = c(0,1750)) +
labs(y = "Runs")

(gg_runs_BB_hex <- gg_base_runs +
aes(x = BB) +
labs(x = "Walks") +
geom_hex())

我们还创建第二个绘图,以便我们可以使用另一个绘图:

set.seed(49)
df = data.frame(x=runif(10000), y=runif(10000))
gg1 = ggplot(df, aes(x,y)) + geom_hex(bins=5)

现在让我们得到两个图中的 hexbin 计数范围

count.range = range(lapply(list(gg1, gg_runs_BB_hex), function(p){
ggplot_build(p)$data[[1]]$count
}))

然后我们可以将这个范围应用于两个图:

plot.list = lapply(list(gg1, gg_runs_BB_hex), function(p) {
p + scale_fill_viridis(begin = 0, end = .9, option = "C", limits = count.range)
})

这是情节的样子:

gridExtra::grid.arrange(grobs=plot.list, ncol=2)

enter image description here

关于r - 使用 geom_hex 以编程方式查找比例填充范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41562890/

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