r - 如何使用 ggplot2 将点和线叠加到等值线图上?

标签 r ggplot2 contour

我想用我想要突出显示的特定点(这些点存储在不同的数据集中)来注释等高线图。当我尝试时,出现错误:

Error: Aesthetics must either be length one, or the same length as the dataProblems:z

但是,当我尝试制作一个可重现的示例时,我收到了不同的错误:

Error in eval(expr, envir, enclos) : object 'z' not found

可重现示例的代码如下:

library(mnormt)
library(dplyr)
library(ggplot2)

f <- function(x, y) {
    dmnorm(x = c(x, y),
            mean = c(0, 0),
            varcov = diag(2))
}
f <- Vectorize(f)


xmesh <- seq(from = -3, to = 3, length.out = 100)
ymesh <- seq(from = -3, to = 3, length.out = 100)
dummy <- expand.grid(x = xmesh, y = ymesh)
dummy$z <- f(dummy$x, dummy$y)

stuff <- data_frame(x = c(0, 0, 1),
                    y = c(0, -1, -1),
                    point = c("O", "P", "Q"))

dummy %>%
    ggplot(aes(x = x, y = y, z = z)) +
    stat_contour(aes(color = ..level..)) +
    labs(color = "density") + 
    geom_point(data = stuff, mapping = aes(x = x, y = y, color = point))

最佳答案

ggplot 将第一次 ggplot 调用中的 aes 传递给其余的 geoms,除非另有说明。因此,错误告诉您它无法在 stuff 中找到 z,并且它仍然认为 z 应该是初始调用中的 z。

有多种方法可以解决这个问题,我认为最简单的解决方法是分别为每个几何对象提供其数据:

ggplot() +
  stat_contour(data = dummy, aes(x = x, y = y, z = z, color = ..level..)) +
  labs(color = "density") + 
  geom_point(data = stuff, aes(x = x, y = y, fill = factor(point)), pch = 21)

enter image description here

注意。你也有一个问题 colour cannot be mapped in two different geoms ,所以我使用 pch 和 fill 修复了它。

关于r - 如何使用 ggplot2 将点和线叠加到等值线图上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32468576/

相关文章:

r - SQLite 中是否有产品运算符(或解决方法)?

r - 删除元素后,数据框不再是数据框

r - ggplot2:将一行放在前面,但保存颜色

matplotlib - 使用 matplotlib 绘制分类值的等高线图

R:等温线作为等值线使用 ggplot2

r - 如何在 R 中绘制带有 3 个变量数据帧的填充轮廓图(无规则网格)?

R plotly : Add segment on Boxplot plotly

r - 使用 R 将 GTFS 空间数据从字符转换为数字

windows - ggplot 字体系列在版本之间发生变化

r - 如何在极坐标图 (coord_polar) 中连接 geom_line 的端点和起点?