簡體   English   中英

如何使用填充漸變來修改圖例中圖例中的顏色?

[英]How to modify the colors in the legend of a plot using a fill gradient?

跟隨這個問題 ,您將如何修改等高線圖例的顏色?

這是生成圖的方法:

x <- rep(seq(0.01, 0.1, length.out = 50), 50)
y <- rep(seq(0.01, 0.1, length.out = 50), each = 50)
z <- 1 / (x^2 + y^2)

my.data <- data.frame(x, y, z)

ggplot(my.data, aes(x = x, y = y, fill = z)) +
  geom_tile() +
  scale_fill_gradientn(colours = c("blue",
                                   "cyan",
                                   "green",
                                   "yellow",
                                   "orange",
                                   "red"),
                       values = rescale(c(0.3, 1, 2, 5, 10, 20, 35))) +
  scale_x_continuous(expand = c(0, 0)) +
  scale_y_continuous(expand = c(0, 0))

結果如下:

丑陋的傳說

我希望能夠手動設置顏色(我知道如何在休息時進行設置),以使其更具可讀性。 在上面的示例中,您不能過多提及較低的值,這可能是最令人感興趣的。圖例中甚至沒有出現藍色。

看來您的values=...搞砸了。 閱讀文檔並嘗試使用values函數,看起來就像通過指定范圍,您可以為每種顏色賦予更少/更多的權重。 我認為您遇到的問題是,顏色仍然保留在圖例中,但是由於根據您的values調用而對它們進行了“加權”,所以它們不可見(也就是說,它們在那里,但是他們只是傳說中的一小部分)。

如果嘗試為values=...一個極值,則可以嘗試一下。 在此示例中,我使用100:

ggplot(my.data) +
  geom_tile(aes(x = x, y = y, fill = z)) +
  scale_fill_gradientn(colours = c("blue",
                                   "cyan",
                                   "green",
                                   "yellow",
                                   "orange",
                                   "red"),
                       values = rescale(c(0.3, 1, 2, 5, 10, 20, 100))) +
  scale_x_continuous(expand = c(0, 0)) +
  scale_y_continuous(expand = c(0, 0))

在此處輸入圖片說明

您可以看到基本上整個圖例都由紅色取代,此外,情節中還有更多紅色。

要更正您的問題,您可以嘗試使用沒有values=...例如:

ggplot(my.data) +
  geom_tile(aes(x = x, y = y, fill = z)) +
  scale_fill_gradientn(colours = c("blue",
                                   "cyan",
                                   "green",
                                   "yellow",
                                   "orange",
                                   "red"))+
  scale_x_continuous(expand = c(0, 0)) +
  scale_y_continuous(expand = c(0, 0))

在此處輸入圖片說明

然后您可以看到圖例中有藍色,但是圖中有更多藍色。 這是數據的人工產物。 如果您嘗試quantile(my.data$z,c(seq(0,1,by=0.05)))您會看到第95個百分位數是quantile(my.data$z,c(seq(0,1,by=0.05)))最大值是5000。如您在圖例中看到的z值不足1000的藍色填充(這是您數據的95%!)。

如果您希望它的藍色較少,則可以再次弄亂這些values (我不建議這樣做-您可能希望准確表示數據)。 像這樣:

ggplot(my.data) +
  geom_tile(aes(x = x, y = y, fill = z)) +
  scale_fill_gradientn(colours = c("blue",
                                   "cyan",
                                   "green",
                                   "yellow",
                                   "orange",
                                   "red"),
                       values =rescale(c(0.3, 3, 4, 5, 10, 20, 35))) +
  scale_x_continuous(expand = c(0, 0)) +
  scale_y_continuous(expand = c(0, 0))

在此處輸入圖片說明

另外,我認為這是一個更好的解決方案,您可以擺脫離群值,從而使繪圖不偏斜。 現在,沒有values操作的ggplot函數可以准確地表示您的數據。

暫無
暫無

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

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