我正在嘗試在 R 中創建一個自定義漸變比例,它將根據值更改顏色。
基本上:
我想填充顏色是之間的梯度darkblue,并blue對于那些之間的數值1和50。
我想填充顏色是之間的梯度lightblue,并yellow對于那些之間的數值50和100。
等等...
我已經嘗試了下面的代碼,但這顯然是錯誤的方法:
scale_fill_gradientn(limits = c(0,50),colours=c("darkblue","blue"),na.value="#101010")
scale_fill_gradientn(limits = c(50,100),colours=c("lightblue","yellow"),na.value="#101010")
scale_fill_gradientn(limits = c(100,1000),colours=c("orange","orangered"),na.value="#101010")
scale_fill_gradientn(limits = c(1000,10000),colours=c("darkred","red"),na.value="#101010")
scale_fill_gradientn(limits = c(10000,30000),colours=c("red","#FF877D"),na.value="#101010")
有人可以幫我嗎?
編輯:
使用此代碼:
scale_fill_gradientn(
limits = range(0,max(da$val)),
colours = colours[c(1, seq_along(colours), length(colours))],
values = c(0, scales::rescale(colour_breaks, from = range(0,da$val)),range(0,da$val)))
我得到這個效果:

這與我想要的很接近,但我并不真正理解重新調整代碼及其在做什么。
我希望它從藍色開始并使用休息時間上升到紅色。
它很接近 - 只是從黃色開始。
編輯:
在@teunbrand 的幫助下,我讓它作業了!
這是代碼:
my_limits <- range(c(0, usa.dat[,50:ncol(usa.dat)]))
max_value <- max(usa.dat[, 50:ncol(usa.dat)])
for (i in 2:ncol(usa.dat)) {
da <- data.frame(fips=usa.dat$countyFIPS,val=usa.dat[,i])
tot <- sum(da$val)
colour_breaks <- c(0,1,100,500,1000,10000,30000)
colours <- c("#101010","blue","lightblue","yellow","red","darkred","magenta")
current_max <- max(da$val)
relative_max <- max_value / current_max
theDate <- substr(names(usa.dat)[i],2,100)
plot_usmap(regions = "counties",
data=da,
values="val"
)
labs(title=paste("Covid-19 Deaths - ",str_replace_all(theDate,"\\.","/")," - Total: ",tot,sep=''))
scale_fill_gradientn(limits = range(0, current_max),
colours = colours,
values = scales::rescale(colour_breaks, to = c(0, relative_max), from = c(0, max_value)),
name="Deaths",na.value="#101010")
theme(panel.background = element_rect(color = "#101010", fill = "#101010"))
ggsave(paste(sprintf("d",i),".png",sep=''))
結果:https : //www.youtube.com/watch?v=HZcnhUr6ghw
uj5u.com熱心網友回復:
您可以通過使用values比例引數來設定特定顏色所在的確切點。在下面的例子中,我們希望"darkblue"在10,"lightblue"20和"yellow"30。
唯一的問題是該values引數適用于 0 和 1 之間的重新縮放值,因此我們應該修復限制并對我們的中斷應用相同的重新縮放。
最后,因為現在 10-30 范圍之外的值是未定義的,最好在(重新縮放的)值 0 和 1 處重復極端的顏色。
library(ggplot2)
colour_breaks <- c(10, 20, 30)
colours <- c("darkblue", "lightblue", "yellow")
ggplot(mpg, aes(displ, hwy, colour = cty))
geom_point()
scale_colour_gradientn(
limits = range(mpg$cty),
colours = colours[c(1, seq_along(colours), length(colours))],
values = c(0, scales::rescale(colour_breaks, from = range(mpg$cty)), 1),
)

由reprex 包(v2.0.1)于 2021 年 10 月 13 日創建
作為一個小說明:在您的描述中,不清楚 50 的顏色應該是什么:在一個漸變中它應該是藍色,而在另一個漸變中它應該是淺藍色。充其量,您可以將其中一種顏色(比方說藍色)設定為 50,并使用 50 微量偏移(例如.Machine$double.eps)作為淡藍色中斷。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/312507.html
