[英]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.