簡體   English   中英

如何在ggplot2中制作漸變色XY圖?

[英]How can I make a gradient colour X-Y plot in ggplot2?

我正在嘗試繪制與這一圖相似的圖。

樣本顏色漸變圖

這類似於熱圖,但是明顯不同,因為顏色不對應計數。 我使用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”值(太大或不適用)此外:警告消息:在f(...)中:強制將不適用的NA引入整數范圍

似乎與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)。 其次,@ 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()

唯一的問題是,您需要將舍入數字與數據的精度相匹配,否則該圖的中間會有很多空白。

但是這種解決方案足夠有效。 謝謝您的幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM