gpt4 book ai didi

r - ggplot 中的空等高线图

转载 作者:行者123 更新时间:2023-12-03 08:28:33 25 4
gpt4 key购买 nike

我正在尝试创建一个简单的等高线图。

下面附有示例代码。输出是一个带有标签和警告消息的空图 -

1: stat_contour(): Zero contours were generated 
2: In min(x) : no non-missing arguments to min; returning Inf
3: In max(x) : no non-missing arguments to max; returning -Inf

有人可以帮我解决这个问题吗?

library(tidyverse)

# x and y are generated from uniform random distribution
x <- runif(1000, min = -5, max = 5)
y <- runif(1000, min = -5, max = 5)
z <- x^2 + y^2

tbl <- tibble(x, y, z)

ggplot(data = tbl,
aes(x = x,
y = y,
z = z)) +
geom_contour_filled(alpha = 0.8) +
scale_fill_viridis_d(drop = FALSE) +

最佳答案

geom_contourgeom_contour_filled 的文档非常具有误导性:它表明当 xy 时效果最好> 形成一个网格,但事实上,除非形成一个网格,否则根本不起作用。

要从随机 (x,y,z) 三元组创建网格,您可以使用 akima::interp 函数。例如,从您的数据开始:

library(tidyverse)

# x and y are generated from uniform random distribution
x <- runif(1000, min = -5, max = 5)
y <- runif(1000, min = -5, max = 5)
z <- x^2 + y^2

tbl <- tibble(x, y, z)

grid <- akima::interp(tbl$x, tbl$y, tbl$z)
griddf <- data.frame(x = rep(grid$x, ncol(grid$z)),
y = rep(grid$y, each = nrow(grid$z)),
z = as.numeric(grid$z))
ggplot(data = griddf,
aes(x = x,
y = y,
z = z)) +
geom_contour_filled(alpha = 0.8) +
scale_fill_viridis_d(drop = FALSE)

enter image description here

注意:akima 不是 tidyverse 的一部分,因此您需要手动将结果转换为 tibble/dataframe,而且很容易出错。我想我是对的,但由于你的函数是对称的,所以我不能 100% 确定。

刚刚注意到此处 reshape 的另一个解决方案:https://stackoverflow.com/a/22895190/2554330 。您可能比我更喜欢那个(或不喜欢,这是一个品味问题)。

关于r - ggplot 中的空等高线图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65873211/

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