在ggplot中绘制等高线
plot contours in ggplot
如何绘制等高线?
我有 x、y、z。我希望使用 V 值绘制等高线。
# data
tbl <- tibble(x = runif(n = 1000, min = 0, max = 1),
y = runif(n = 1000, min = 0, max = 1),
V = x^2.5 + y^2)
# plots
ggplot(data = tbl,
aes(x = x,
y = y
z = V)) +
geom_contour_filled(alpha = 0.8, breaks = seq(0, 2, 0.2)) +
theme_bw()
geom_contour_filled
需要合并数据。
所以你的数据应该是
# data
tbl <- tibble(x = rep(seq(0,1,length.out=100),100),
y = rep(seq(0,1,length.out=100),each=100),
V = x^2.5 + y^2)
这是一种方法,通过无耻地复制和粘贴 geom_contour_filled
文档中的 franke
示例来解决问题。
诀窍是使用包 interp
来准备绘图数据。在下面的代码中,创建 grid
的指令中唯一的变化是数据集被合并。
suppressPackageStartupMessages({
library(tidyverse)
library(interp)
})
set.seed(2022)
tbl <- tibble(x = runif(n = 1000, min = 0, max = 1),
y = runif(n = 1000, min = 0, max = 1),
V = x^2.5 + y^2)
grid <- with(tbl, interp::interp(x, y, V))
griddf <- subset(data.frame(x = rep(grid$x, nrow(grid$z)),
y = rep(grid$y, each = ncol(grid$z)),
z = as.numeric(grid$z)),
!is.na(z))
# plots
ggplot(data = griddf,
aes(x = x,
y = y,
z = z)) +
stat_contour_filled(alpha = 0.8, breaks = seq(0, 2, 0.2)) +
theme_bw()
由 reprex package (v2.0.1)
于 2022-05-18 创建
编辑
为了更好地控制 bin,请使用参数 bins
或参数 binwidth
而不是 breaks
。以下代码的 bin 宽度为 0.1
,将 bin 的数量加倍,现在使用 geom_contour_filled
,就像问题中一样。
ggplot(data = griddf,
aes(x = x,
y = y,
z = z)) +
geom_contour_filled(alpha = 0.8, binwidth = 0.1, show.legend = FALSE) +
theme_bw()
由 reprex package (v2.0.1)
于 2022-05-18 创建
如何绘制等高线?
我有 x、y、z。我希望使用 V 值绘制等高线。
# data
tbl <- tibble(x = runif(n = 1000, min = 0, max = 1),
y = runif(n = 1000, min = 0, max = 1),
V = x^2.5 + y^2)
# plots
ggplot(data = tbl,
aes(x = x,
y = y
z = V)) +
geom_contour_filled(alpha = 0.8, breaks = seq(0, 2, 0.2)) +
theme_bw()
geom_contour_filled
需要合并数据。
所以你的数据应该是
# data
tbl <- tibble(x = rep(seq(0,1,length.out=100),100),
y = rep(seq(0,1,length.out=100),each=100),
V = x^2.5 + y^2)
这是一种方法,通过无耻地复制和粘贴 geom_contour_filled
文档中的 franke
示例来解决问题。
诀窍是使用包 interp
来准备绘图数据。在下面的代码中,创建 grid
的指令中唯一的变化是数据集被合并。
suppressPackageStartupMessages({
library(tidyverse)
library(interp)
})
set.seed(2022)
tbl <- tibble(x = runif(n = 1000, min = 0, max = 1),
y = runif(n = 1000, min = 0, max = 1),
V = x^2.5 + y^2)
grid <- with(tbl, interp::interp(x, y, V))
griddf <- subset(data.frame(x = rep(grid$x, nrow(grid$z)),
y = rep(grid$y, each = ncol(grid$z)),
z = as.numeric(grid$z)),
!is.na(z))
# plots
ggplot(data = griddf,
aes(x = x,
y = y,
z = z)) +
stat_contour_filled(alpha = 0.8, breaks = seq(0, 2, 0.2)) +
theme_bw()
由 reprex package (v2.0.1)
于 2022-05-18 创建编辑
为了更好地控制 bin,请使用参数 bins
或参数 binwidth
而不是 breaks
。以下代码的 bin 宽度为 0.1
,将 bin 的数量加倍,现在使用 geom_contour_filled
,就像问题中一样。
ggplot(data = griddf,
aes(x = x,
y = y,
z = z)) +
geom_contour_filled(alpha = 0.8, binwidth = 0.1, show.legend = FALSE) +
theme_bw()
由 reprex package (v2.0.1)
于 2022-05-18 创建