【发布时间】:2021-07-03 21:17:38
【问题描述】:
我正在尝试为 OD 矩阵创建热图,但我想按特定权重缩放行和列。由于这些权重在每个类别中都是恒定的,我希望该图将保持行和列结构。
# Tidy OD matrix
df <- data.frame (origin = c(rep("A", 3), rep("B", 3),rep("C", 3)),
destination = rep(c("A","B","C"),3),
value = c(0, 1, 10, 5, 0, 11, 15, 6, 0))
# Weights
wdf <- data.frame(region = c("A","B","C"),
w = c(1,2,3))
# Add weights to the data.
plot_df <- df %>%
merge(wdf %>% rename(w_origin = w), by.x = 'origin', by.y = 'region') %>%
merge(wdf %>% rename(w_destination = w), by.x = 'destination', by.y = 'region')
数据如下所示:
> plot_df
destination origin value w_origin w_destination
1 A A 0 1 1
2 A C 15 3 1
3 A B 5 2 1
4 B A 1 1 2
5 B B 0 2 2
6 B C 6 3 2
7 C B 11 2 3
8 C A 10 1 3
9 C C 0 3 3
但是,当在aes() 中将权重作为width 和height 传递时,我得到了这个:
ggplot(plot_df,
aes(x = destination,
y = origin)) +
geom_tile(
aes(
width = w_destination,
height = w_origin,
fill = value),
color = 'black')
它似乎适用于列的大小(宽度),但不完全是因为比例不正确。而且行到处都是,没有对齐。
我只使用geom_tile,因为我可以通过height 和width 作为美学,但我接受其他建议。
【问题讨论】:
标签: r ggplot2 heatmap aesthetics