Добавление полосы непрерывного цветового градиента в график

92
9

Я использую следующие данные и код для построения barplot:


ddf=structure(list(VAR = structure(1:9, .Label = c("aaa", "bbb", 
"ccc", "ddd", "eee", "fff", "ggg", "hhh", "iii"), class = "factor"),
VAL = c(0L, 32L, 64L, 96L, 128L, 160L, 192L, 224L, 256L)), .Names = c("VAR",
"VAL"), class = "data.frame", row.names = c(NA, -9L))

barplot(ddf$VAL,col=rgb(ddf$VAL,256-ddf$VAL,0,maxColorValue=256))


Как добавить строку легенды с этими цветами на ней, с соответствующими значениями, записанными там? Мне нужна строка легенды, как показано на следующем рисунке:


library(latticeExtra)
dat <- data.frame(x = rnorm(1000), y = rnorm(1000), z = rnorm(1000, mean = 1))
maxz <- max(abs(dat$z))
levelplot(z ~ x * y, dat, at = seq(-maxz, maxz, length = 100), panel = panel.levelplot.points, par.settings = custom.theme.2())

Я попытался использовать следующие примеры функций, но не смог изменить их в моих потребностях:


legend("bottom", legend = LETTERS[1:6], col = c6, ncol = 2, cex = 2, lwd = 3, text.font = i, text.col = c6)

libarary(plotrix)
testcol<-color.gradient(c(0,1),0,c(1,0),nslices=5)
color.legend(11,6,11.8,9,col.labels,testcol,gradient="y")


Спасибо заранее.

спросил(а) 2021-01-19T18:58:38+03:00 9 месяцев, 1 неделя назад
1
Решение
136

Фокус в том, чтобы нарисовать цветную кнопку как изображение на отдельной панели. Обратите внимание, что я уменьшаю границу между панелями, уменьшая par(mar=...) и добавляя внешний край вокруг обеих панелей с помощью par(oma=...).


my.palette <- rgb(ddf$VAL,256-ddf$VAL,0,maxColorValue=256)

# Create two panels side by side
layout(t(1:2), widths=c(5,1))

# Set margins and turn all axis labels horizontally (with `las=1`)
par(mar=rep(.5, 4), oma=rep(3, 4), las=1)

barplot(ddf$VAL,col=my.palette)

# Draw the color legend
image(1, ddf$VAL, t(seq_along(ddf$VAL)), col=my.palette, axes=FALSE)
axis(4)

enter image description here

ответил(а) 2021-01-19T18:58:38+03:00 9 месяцев, 1 неделя назад
66

В качестве альтернативы вы можете использовать colors.scale из пакета plotrix и добавить его, например, в стандартный legend. Это именно то, что делает функция plotZCol в (my) spatDataManagement.


Из примеров:

x <- rnorm(1000)
y <- rnorm(1000)
library("spatDataManagement")

plotZCol(x,y,zCol=x+y)


введите описание изображения здесь

ответил(а) 2021-01-19T18:58:38+03:00 9 месяцев, 1 неделя назад
46

просто для полноты color.legend версии, потому что я думаю, что это самый простой:


ваши данные:


ddf=structure(list(VAR = structure(1:9, .Label = c("aaa", "bbb", "ccc", "ddd", "eee", "fff", "ggg", "hhh", "iii"), class = "factor"),                       VAL = c(0L, 32L, 64L, 96L, 128L, 160L, 192L, 224L, 256L)), .Names = ("VAR","VAL"), class = "data.frame", row.names = c(NA, -9L))

теперь мы построим планку с легендой.
Цифрами являются поля легенды (x1, y1, x2, y2)


par(mar=c(1,3,1,5)+0.1,xpd=TRUE)
col.pal<-rgb(ddf$VAL,256-ddf$VAL,0,maxColorValue=256)
barplot(ddf$VAL,col=rgb(ddf$VAL,256-ddf$VAL,0,maxColorValue=256))
color.legend(12,220,13,80,rev(ddf$VAL),rev(col.pal),gradient="y")

ваш красочный барплот

ответил(а) 2021-01-19T18:58:38+03:00 9 месяцев, 1 неделя назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема