Я делаю тепловую карту с функцией heatmap и использую ggplot2 "scale_fill_gradient2", чтобы сделать расходящуюся цветовую шкалу, переходящую от низкого (красный) к высокому (зеленый).
Объект, который наносится на график это:
> mpf_s[-c(1,6,7),-which(colnames(mpf_s)=="GOV")]
BANKS NFC HH RoW
Deposits 847747.2 0.0 0 13.50861
Bonds -1808582.0 -13411.0 -6725 -182595.83690
Loans 123761.2 0.0 50 -32254.37801
Equities 116713.5 274467.3 0 2310.84237
код такой:
heatmaply(mpf_s[-c(1,6,7),-which(colnames(mpf_s)=="GOV")],
dendrogram = "none",
scale_fill_gradient_fun = ggplot2::scale_fill_gradient2(low = "red",
high = "green",
mid="ghostwhite"
),
xlab = "", ylab = "",
main = "",
scale="row",
grid_color = "white",
grid_width = 0.000001,
hide_colorbar = TRUE,
branches_lwd = 0.01,
fontsize_row = 5,
fontsize_col = 7,
labCol = names(mpf_s[-c(1,6,7),-which(colnames(mpf_s)=="GOV")]),
labRow = rownames(mpf_s[-c(1,6,7),-which(colnames(mpf_s)=="GOV")]),
heatmap_layers = theme(axis.line=element_blank())
)
и токовый выход такой: 1
Даже если я ' m масштабируется с аргументом scale="row"
, маленькие отрицательные значения окрашиваются в зеленый цвет, когда в строке присутствует значительно большее отрицательное число.
Мне нужны отрицательные значения, такие как красный, положительные, как зеленый, и нули как " ghostwhite ", поэтому я думаю, что мне нужен еще один процесс перемасштабирования .
Я попытался удалить аргумент масштабирования строки (scale =" row "), но затем в качестве средней точки отображаются небольшие значения "ghostwhite". Таким образом, проблема просто меняется местами, , так как мне нужно прочитать маленькие, но ненулевые значения, как положительные или отрицательные.
[Масштабированная карта тепла без строки] такова: 2
У кого-нибудь есть подсказка?
ps: "нормализация и процентирование не помогли. Я пытался использовать ограничения, но без особого успеха тоже.