#r #ggplot2 #heatmap
#r #ggplot2 #тепловая карта
Вопрос:
Я пытаюсь построить тепловую карту с помощью ggplot2, и я хотел бы изменить размер цветовой панели и увеличить шрифт.
Вот соответствующая часть кода:
g <- ggplot(data=melt.m)
g2 <- g geom_rect(aes(xmin=colInd-1, xmax=colInd,
ymin=rowInd-1, ymax=rowInd, fill=value))
g2 <- g2 scale_x_continuous('beta', breaks=c(1, ceiling(cols/2), rows)-0.5,
labels=c(1,ceiling(cols/2), rows))
g2 <- g2 scale_y_continuous('alpha', breaks=c(1, ceiling(rows/2), rows)-0.5,
labels=c(1, ceiling(rows/2), rows))
g2 <- g2 opts(panel.grid.minor=theme_line(colour=NA),
panel.grid.major=theme_line(colour=NA),
panel.background=theme_rect(fill=NA, colour=NA),
axis.text.x=theme_text(size=30),
axis.text.y=theme_text(size=30, angle=90),
axis.title.x=theme_text(size=30),
axis.title.y=theme_text(size=30, angle=90), title = title)
heatscale <- c(low='ghostwhite', high='steelblue')
g2 <- g2 scale_fill_gradient("", heatscale[1], heatscale[2], bias = 10)
Работает нормально, проблема в том, что цветовая легенда с правой стороны слишком мала. Есть ли способ увеличить цветовую легенду и увеличить размер шрифта легенды?
Спасибо,
kz
Ответ №1:
У нас нет ваших melt.m
данных, поэтому приведенный вами код невозможно воспроизвести. Используя diamonds
набор данных, который поставляется с ggplot2
, в качестве примера, хотя:
ggplot(diamonds, aes(x=table, y=price))
geom_bin2d()
scale_fill_gradient("", 'ghostwhite', 'steelblue', bias=10)
opts(legend.key.width=unit(1, "in"),
legend.text = theme_text(size=30))
legend.key.width
и legend.text
— это то, что вы ищете. Я использовал преувеличенные размеры, чтобы сделать это более очевидным.
Для получения более подробной информации о доступных параметрах см.https://github.com/hadley/ggplot2/wiki/ opts()-List
Ответ №2:
Я попробовал это и обнаружил, что R или ggplot2 изменились за последние четыре года. Это привело к ошибке:
Error: 'opts' is deprecated. Use 'theme' instead. (Defunct; last used in version 0.9.1)
Удалось заставить его работать со следующим вместо:
p theme(legend.text = element_text(size=30),legend.key.size = unit(1, "in"))
Изначально пытался просто изменить размер текста, но пришлось изменить размер ключа вместе с ним, иначе он станет нечитаемым. Кроме того, unit
требуется библиотека, явно загруженная с library(grid)