【问题标题】:How can I make a gradient colour X-Y plot in ggplot2?如何在 ggplot2 中制作渐变色 X-Y 图?
【发布时间】: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

这似乎与xy 的组合不存在有关。如果我在代码中切换ay,它确实有效。使用该信息,此代码会生成我在此特定情况下要查找的内容。

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。试过了,没有变化。是一个几乎更新的版本。

标签: r ggplot2


【解决方案1】:

首先,需要使用geom_raster(感谢@Axeman)。其次,@Chris 分享的链接 (https://github.com/tidyverse/ggplot2/issues/2516) 似乎证明了我的问题,即使我使用的是最新的 ggplot2 包 (3.1.0)。

所以最后,这段代码可以工作:

library(tidyverse)

data_bad = crossing(
    x = seq(-1, 1, by = 0.01), 
    a = seq(1, 5, by = 0.01)
  ) %>%
  mutate(y = a*x^2)

ggplot(data_bad, aes(x = round(x,2), y = round(y,2), fill = a)) +
  geom_raster()

唯一的问题是您需要将舍入数与数据的精度相匹配,否则绘图中间会有很多空白。

但是这个解决方案已经足够了。感谢您的帮助。

【讨论】:

    猜你喜欢
    • 2011-05-19
    • 1970-01-01
    • 2019-08-27
    • 1970-01-01
    • 2018-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多