Как создать цветные полосы в ggplot, аналогичные тем, которые созданы Lattice - PullRequest
0 голосов
/ 03 мая 2018

Я хочу, чтобы цвета, созданные с помощью ggplot, были похожи на то, что создает функция spplot (из пакета lattice). Что-то вроде прикрепленного изображения с каждым конечным числом цветов, назначаемых прямоугольным блокам, вместо создания непрерывного спектра цветов. Мне нужно иметь возможность определить цвет контура цветовой шкалы, а также формат тиков.

An example of what I wish to have

Я собрал этот простой пример. Как я могу изменить это в нечто похожее на это изображение? Например, я хочу, чтобы легенда начиналась с -3 и заканчивалась на 3 с 10 блоками цветов. Я уже попробовал 'nbin' в функции 'guides'. Но мне нужно, чтобы надписи были размещены на «краях» цветовых блоков, а не на их середине (то есть в центре отсеков).

ps: А иногда ggplot создает метки за пределами длины цветовой шкалы!

library(ggplot2)

dat <- data.frame(x = rnorm(100), y = rnorm(100), col=rnorm(100))

ggplot(dat, aes(x,y,color=col)) + 
  geom_point() + 
  scale_color_gradient2(limits=c(-3,3), midpoint=0) +             
  guides(color=guide_colourbar(nbin=10, raster=FALSE))

1 Ответ

0 голосов
/ 03 мая 2018

Я думаю, то, что вы просите, невозможно при использовании последней (публичной) версии ggplot2.

Гадкий метод, делай на свое усмотрение

Однако, если вы устанавливаете версию для разработки (это привело к конфликту некоторых версий с другими пакетами на моем компьютере, и я думаю, что некоторые вещи еще не полностью работают) с использованием

devtools::install_github("tidyverse/ggplot2")
library(ggplot2)

Вы получите еще несколько опций для изменения направляющих, таких как ticks.colour, frame.colour или frame.linewidth, которые позволяют настроить цветовую панель в соответствии с вашими требованиями:

set.seed(6)
dat <- data.frame(x = rnorm(100), y = rnorm(100), z=rnorm(100))
ggplot(dat, aes(x,y,color=z)) + geom_point() +
  scale_color_gradientn(colours=c("blue","gray80","red"), limits=c(-3,3),
    breaks=c(-3/9*8,-3/9*4,0,3/9*4,3/9*8), labels=c(-2.4,-1.2,0,1.2,2.4), na.value = "green",
    guide=guide_colorbar(nbin=10, raster=F, barwidth=20, frame.colour=c("black"),
                         frame.linewidth=1, ticks.colour="black",  direction="horizontal")) +
  theme(legend.position = "bottom") 
  • Используйте colours = c() для указания вектора цветов
  • Используйте breaks вместе с labels, чтобы вручную назначать метки в правильных положениях вдоль цветовой шкалы. РЕДАКТИРОВАТЬ: Мы можем легко вычислить требуемую позицию вдоль цветовой шкалы, разделив 3 (длина половины вдоль цветовой шкалы) на 9 (есть 9 полукруглых от середины полосы до центра первый блок) и умножить его на количество полупериодов, где мы хотим, чтобы метка появилась.
  • Значения за пределами limits будут окрашены в соответствии с na.value
  • Вы можете дополнительно указать name = "Your Variable Name" вместо z рядом с цветовой шкалой

Colorbar with values between colors and a black contour around bar

Я не вижу способа поставить -3 / 3 на самых концах цветовой шкалы, кроме ручного размещения текстового элемента в правильном положении на графике (против чего я настоятельно рекомендую).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...