Örneğin, rengi z
ile eşleştirmek ve 0 eşlemi "beyaz" ile eşlemek istiyorum. Eğer renk yerine değerlerin nasıl dağıtıldığı hakkında genel bir fikir vermektense, gerçekten yararlı bir göstergesi değildir görebileceğiniz gibiScale_fill_gradient kullanırken aşırı değerleri/dağıtımı yürütmek için diğer yaklaşımlar?
> a <- data.frame(x=1:10, y=1, z=c(rnorm(8),-12,12))
> a
x y z
1 1 1 -0.4603911
2 2 1 -0.4868471
3 3 1 0.2180346
4 4 1 -0.8807652
5 5 1 1.7379462
6 6 1 -0.1334904
7 7 1 -0.3675578
8 8 1 0.9225425
9 9 1 -12.0000000
10 10 1 12.0000000
ggplot(a,aes(x=x,y=y,fill=z)) + geom_bar(stat="identity") +
scale_fill_gradient2(high="green", mid="white", low="red")
, şimdi renk sadece hangi değerlerin eğitimsiz gözle ayırt edilemez çoğunluk değerlerini bırakarak ekstrem söyler .
bir yöntem Non-linear color distribution over the range of values in a geom_raster yoktur ama biraz karmaşık görünüyor ve sadece belli belirsiz nasıl çalıştığını anlayabiliriz.
o zaman belki order
dolayısıyla iyi bir rescale yoldur düşündüm:
ggplot(a,aes(x=x,y=y,fill=ecdf(z)(z))) + geom_bar(stat="identity") +
scale_fill_gradient2(high="green", mid="white", low="red", midpoint=ecdf(a$z)(0))
Bu bir dereceye kadar çalıştı (burada yeniden ölçeklemek ne tür bir değer 0 bulmak için ecdf
yerine order
kullandı. Ancak, dezavantajı ise, efsanenin etiketlerini yeniden ölçeklendirilmiş olanlar yerine ölçeklendirilmemiş değerler olarak tutmak istiyorum.O yüzden labels=function(x) quantile(a$z, x)
gibi bir şey yapamayacağımı düşünüyorum.Ayrıca, ecdf
'u tekrar tekrar kullanarak aptalca buluyorum ve quantile
ileri ve geri doğru geri çekilir. Bu gibi durumlarda daha iyi veya daha basit bir yaklaşım var mıdır, örn. Haritalanmış değerlerin her türlü dağılımı için makul renkleri doldurmaya yetecek kadar sağlam (optimum veya çok doğru olması gerekmez).