Nieliniowy rozkład kolorów w zakresie wartości w geom_raster

Mam do czynienia z następującym problemem: kilka skrajnych wartości dominuje w skali kolorów mojejgeom_raster wątek. Przykład jest prawdopodobnie bardziej jasny (zauważ, że ten przykład działa tylko z najnowszą wersją ggplot2, używam 0.9.2.1):

library(ggplot2)
library(reshape)
theme_set(theme_bw())

m_small_sd = melt(matrix(rnorm(10000), 100, 100))
m_big_sd = melt(matrix(rnorm(100, sd = 10), 10, 10))
new_xy = m_small_sd[sample(nrow(m_small_sd), nrow(m_big_sd)), c("X1","X2")]
m_big_sd[c("X1","X2")] = new_xy
m = data.frame(rbind(m_small_sd, m_big_sd))
names(m) = c("x", "y", "fill")

ggplot(m, aes_auto(m)) + geom_raster() + scale_fill_gradient2()

W tej chwili rozwiązuję to, ustawiając wartości nad pewnym kwantylem równym temu kwantylowi:

qn = quantile(m$fill, c(0.01, 0.99), na.rm = TRUE)
m = within(m, { fill = ifelse(fill < qn[1], qn[1], fill)
                fill = ifelse(fill > qn[2], qn[2], fill)})

To naprawdę nie wydaje się optymalnym rozwiązaniem. Chciałbym zrobić nieliniowe odwzorowanie kolorów na zakres wartości, tj. Więcej kolorów obecnych w obszarze z większą liczbą obserwacji. Wspplot&nbsp;mógłbym użyćclassIntervals&nbsp;zclassInt&nbsp;pakiet do obliczenia odpowiednich granic klas:

library(sp)
library(classInt)
gridded(m) = ~x+y
col = c("#EDF8B1", "#C7E9B4", "#7FCDBB", "#41B6C4", 
        "#1D91C0", "#225EA8", "#0C2C84", "#5A005A")
at = classIntervals(m$fill, n = length(col) + 1)$brks
spplot(m, at = at, col.regions = col)

O ile mi wiadomo, nie jest możliwe zakodowanie tego odwzorowania kolorów na interwały klas, jak to możliwespplot. Mogę przekształcićfill&nbsp;osi, ale ponieważ są wartości ujemnefill&nbsp;zmienna, która nie będzie działać.

Więc moje pytanie brzmi: czy są jakieś rozwiązania tego problemu przy użyciu ggplot2?