Wracam do tego problemu, który pojawił się około rok temu. Chciałbym, aby mój "kolorbaryczny" przewodnik był skutecznie wyświetlany w skali logarytmicznej, aby na wynos patrząc na to, że coraz ciemniejsze wartości niebieskiego odzwierciedlają większe znaczenie.Zmień rozmiar/ręcznie wprowadź przerwy w kolorowym przewodniku po geom_tile ORAZ zamień etykiety osi Y
z następującego kodu, wygenerować poniższy obraz:
pz <- ggplot(dat.m, aes(x=variable,y=Category)) +
geom_tile(aes(fill=value)) +
xlab(NULL) + ylab(NULL) +
scale_fill_gradientn(colours=c("#000066","#0000FF","#DDDDDD","white"),
values=c(0,0.05,0.050000000000001,1.0),
breaks=c(0, 0.000001, 0.01, 0.05, 1),
guide = "colourbar") +
theme_bw()+
theme(panel.background = element_blank(),
panel.border = element_blank(),
axis.ticks.x = element_blank(),
axis.ticks.y = element_blank()) +
theme(legend.position="top",
legend.text = element_text(angle=45),
axis.text.x = element_text(angle=45)
)
Albo mogę wyświetlić go jako "legendy" w przeciwieństwie do "colourbar":
Ale to, czego naprawdę pragnę, to coś takiego:
Próbowałem dodając 'trans = "log"' (scale_fill_gradientn (trans = "log")), ale istnieje wiele zer w moich danych, co powoduje problemy. Jeśli masz jakieś pomysły, byłoby to bardzo cenne!
Dotychczasowe brzmienie:
Próbuję zrobić mapę cieplną p-wartości dla różnych próbek dla różnych kategoryzacji. Są dwie rzeczy chciałbym zmodyfikować na tej działce:
chciałbym dopasować legendę o moim
geom_tile
działki podkreślić dolnego końca skali legenda zachowując pełne spektrum gradientu - podobne do tego, jak by wyglądało, gdyby była to skala logarytmiczna. Zatem zasadniczo przejście od białego do niebieskiego od 1,0-0,05 do przejścia od niebieskiego do ciemnego od 0,05 do 0,00 będzie w przybliżeniu równe pod względem wielkości. Czy istnieje sposób, w jaki mogę ręcznie dostosować przewodnik kolorów?Chciałbym zastąpić nazwy osi Y, aby móc usunąć moją "pustą" etykietę wiersza. Uwaga, kategorie są po prostu reprezentowane tutaj jako litery, ale w moim prawdziwym zestawie danych są długie. Wstawiłem "pozorowane" wiersze danych, aby podzielić kategoryzacje na uchwyty i kazałem, aby płytki w każdym bloku przechodziły od najbardziej znaczących do znaczących - jestem pewien, że jest lepsze rozwiązanie tego problemu, ale to właśnie wymyśliłem po wiele nieudanych prób innych pomysłów, które znalazłem na przepełnieniu stosu! Próbowałem je oznaczyć etykietą
scale_y_discrete
, ale jest to pomieszane z wyżej wymienioną kolejnością.
Pomoc z którąkolwiek z tych kwestii zostanie doceniona!
Oto zbiór danych próbki:
dput(dat.m)
structure(list(Category = structure(c(12L, 11L, 10L, 9L, 8L,
7L, 6L, 5L, 4L, 3L, 2L, 1L, 12L, 11L, 10L, 9L, 8L, 7L, 6L, 5L,
4L, 3L, 2L, 1L, 12L, 11L, 10L, 9L, 8L, 7L, 6L, 5L, 4L, 3L, 2L,
1L), class = "factor", .Label = c("j", "i", "empty2", "h", "empty1",
"g", "f", "e", "d", "c", "b", "a")), variable = structure(c(1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L,
2L, 2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L,
3L, 3L, 3L), .Label = c("b2", "c1", "c2"), class = "factor"),
value = c(7.40214650772221e-06, 0.0075828339, 0.1825924627,
0.0384381317, 0.0440256659, 0.3659284985, 0.9777569144, 1,
0.0075828339, 1, 0.2193606406, 0.3659284985, 0.0004289756,
0.0011541045, 0.0004289756, 0.4400885491, 0.6121402215, 0.6724032426,
0.2735924085, 1, 0.018824582, 1, 0.4386503891, 0.4249526456,
1.05094571578633e-05, 0.0027216795, 0.715979827, 0.0050376405,
0.7473334763, 0.9053300832, 1, 1, 0.0015392848, 1, 0.039679469,
0.0950327519)), .Names = c("Category", "variable", "value"
), row.names = c(NA, -36L), class = "data.frame")
I tu jest mój kod:
col_blue <- c("#FFFFFF","#000099","#000066","#000033")
ggplot(dat.m, aes(x=variable,y=Category)) +
geom_tile(aes(fill=value)) +
xlab(NULL) + ylab(NULL) +
scale_fill_gradientn(colours=col_blue, values=c(1,0.05,0.01,0),guide="colorbar") +
theme_mary(base_size=12)
UPDATE:
Więc teraz mam zmodyfikowane t koduje jako taki z następującymi wynikami. Zbliżam się do tego, co mam nadzieję osiągnąć, ale chciałbym zagrać w proporcjach paska kolorów, aby nieco bardziej wyrazić gradient od 0,05-0,0.
col_blue <- c("#FFFFFF","#000099","#000066","#000033")
ggplot(dat.m, aes(x=variable,y=Category)) +
geom_tile(aes(fill=value)) +
xlab(NULL) + ylab(NULL) +
scale_fill_gradientn(colours=col_blue, values=c(1,0.05,0.01,0), guide=FALSE) +
scale_colour_gradientn(guide = "colourbar", limits = c(0,1),breaks=c(1,0.05,0.01,0),values=c(1,0.05,0.01,0),colours=c("#FFFFFF","#000099","#000066","#000033"))
Skąd się wzięło 'theme_mary'? –
Wiem, że to stary komentarz, ale ponieważ właśnie zaktualizowałem to pytanie, odpowiedź brzmi - theme_mary to niestandardowy motyw, który wcześniej napisałem. Usunąłem go ze zaktualizowanego kodu. Przepraszamy za jakiekolwiek zamieszanie! – ONeillMB1