【发布时间】:2019-06-04 14:47:34
【问题描述】:
我正在尝试制作与此类似的情节。
这类似于热图,但明显不同,因为颜色与计数不对应。我使用 geom_point() 制作了这个,各个痕迹之间的差异非常小。
library(tidyverse)
data = crossing(
x = seq(-1, 1, by = 0.01),
a = seq(1, 5, by = 0.01)
) %>%
mutate(y = a*x^2)
ggplot(data, aes(x = x, y = y, colour = a)) +
geom_point() +
labs(title = "Plot of y = ax^2")
显然这不太理想,因为它需要大量时间并生成超过 80k 行的数据集。我确信有更好的方法来做到这一点。有什么想法吗?谢谢。
编辑: 根据@Axeman 的评论,我使用了 geom_raster。然而,一个幼稚的版本是行不通的,即
ggplot(data, aes(x = x, y = y, fill = a)) +
geom_raster()
结果是错误
矩阵中的错误(NA_character_,nrow = nrow,ncol = ncol):无效 'nrow' 值(太大或 NA)另外:警告消息:在 f(...) : 通过强制引入整数范围的 NAs
这似乎与x 和y 的组合不存在有关。如果我在代码中切换a 和y,它确实有效。使用该信息,此代码会生成我在此特定情况下要查找的内容。
data = crossing(
x = seq(-1, 1, by = 0.01),
y = seq(0, 5, by = 0.01)
) %>%
mutate(a = y/(x^2)) %>%
filter(a <= 5 & a >= 1)
ggplot(data, aes(x = x, y = y, fill = a)) +
geom_raster()
它的工作速度要快得多,但它需要我求解我想为a 绘制的方程。我认为这不适用于复杂的方程,也不适用于经验数据。一定有更好的方法。
【问题讨论】:
-
我想你在找
geom_raster。 -
谢谢,@Axeman。不过,我似乎遗漏了一些明显的东西。
ggplot(data, aes(x = x, y = a, fill = y)) + geom_raster()有效,但ggplot(data, aes(x = x, y = y, fill = a)) + geom_raster()出现“矩阵错误(NA_character_,nrow = nrow,ncol = ncol):无效的 'nrow' 值(太大或 NA)此外:警告消息:在 f(... ) : 由强制引入整数范围的 NA" -
也许尝试更新ggplot2:github.com/tidyverse/ggplot2/issues/2516
-
谢谢@Chris。试过了,没有变化。是一个几乎更新的版本。