R:为什么我的热图根据我是否先对数据进行排序而显得不同?

问题描述 投票:0回答:1

我在R中制作了一个热图,显示了一个变量(Corona错误信息得分)对另外两个变量(漠不关心得分和刚性得分)的依赖性。我不明白为什么根据Corona错误信息得分来排序会使热图的外观有所不同。

这是我用来生成图表的代码。

dset %>%
  arrange(Mean_Corona) %>%
  ggplot(aes(x=Mean_Rigidity, y=Mean_Indifference, fill = Mean_Corona)) +
  geom_tile(alpha=0.8) +
  scale_fill_distiller(palette = "RdYlGn") +
  ylab("Indifference Score") +
  xlab("Rigidity Score") +
  labs(color="Corona Misinformation Score") +
  theme(
    legend.position="bottom", 
    panel.background = element_rect(fill = "white"),
    panel.grid.major = element_line(colour = "grey70", size = 0.2),
    panel.grid.minor = element_blank())

这就是图表的样子。

Heatmap with arrange

如果我运行同样的代码,但删除第二行(arrange(Mean_Corona) %>%),热图看起来就像这样。

Heatmap without arrange

如果我把同一个变量的数据按降序排列,热图看起来又不一样了。我不明白的是,为什么在数据集中对行进行排序会对图形的外观产生任何影响。每个瓦片的阴影不应该只是由具有该分数的人的平均电晕误导分数决定吗?我被卡住了,因为我不知道更准确的数据显示方式是什么。

r ggplot2 data-visualization
1个回答
1
投票

你应该删除alpha,因为顺序定义的方式,瓷砖绘制在对方。

最好的问候Roel


1
投票

你会注意到,这些地块的所有瓷砖都在相同的范围内。位置 但有些瓷砖有不同的颜色。您说的很对,在这里,您可以看到 Mean_Corona 不一样,但确实如此 只有当每块瓷砖的位置是独一无二的时候. 如果你的每个瓷砖位置都有多个值,而你的排序为 Mean_Corona然后先绘制低值瓷砖,再绘制高值瓷砖。在...之上 低值的瓷砖。如果你把这个顺序反过来,高价值的瓷砖将被低价值的瓷砖所掩盖。

我们可以更清楚地看到这一点,如果我们创建一个小的假数据集,有8个独特的瓷砖,但只有4个独特的瓷砖位置。

dset <- data.frame(Mean_Corona = 1:8,
                   Mean_Indifference = rep(c(0.5, 1.5), 4),
                   Mean_Rigidity = rep(c(0.5, 1.5), each = 4))

所以让我们用原始数据框来绘制这个图,它恰好是按以下方式排序的 Mean_Corona 已经。

dset %>%
  ggplot(aes(x=Mean_Rigidity, y=Mean_Indifference, fill = Mean_Corona)) +
  geom_tile(alpha=0.8) +
  scale_fill_distiller(palette = "RdYlGn") +
  ylab("Indifference Score") +
  xlab("Rigidity Score") +
  labs(color="Corona Misinformation Score") +
  theme(
    legend.position="bottom", 
    panel.background = element_rect(fill = "white"),
    panel.grid.major = element_line(colour = "grey70", size = 0.2),
    panel.grid.minor = element_blank())

enter image description here

现在我们按降序绘制数值。在这里我们看到,低值已经被绘制在高值之上。


dset %>%
  arrange(-Mean_Corona) %>%
  ggplot(aes(x=Mean_Rigidity, y=Mean_Indifference, fill = Mean_Corona)) +
  geom_tile(alpha=0.8) +
  scale_fill_distiller(palette = "RdYlGn") +
  ylab("Indifference Score") +
  xlab("Rigidity Score") +
  labs(color="Corona Misinformation Score") +
  theme(
    legend.position="bottom", 
    panel.background = element_rect(fill = "white"),
    panel.grid.major = element_line(colour = "grey70", size = 0.2),
    panel.grid.minor = element_blank())

enter image description here

一个可能的解决方法是将冷漠和刚度的分数进行分组 然后取该位置的瓷砖的平均值 这将确保你在每个位置都有一个单一的瓦片,更好地反映变量之间的关系。

dset %>%
  group_by(Mean_Rigidity, Mean_Indifference) %>%
  summarise(Mean_Corona = mean(Mean_Corona)) %>%
  ggplot(aes(x=Mean_Rigidity, y=Mean_Indifference, fill = Mean_Corona)) +
  geom_tile(alpha=0.8) +
  scale_fill_distiller(palette = "RdYlGn") +
  ylab("Indifference Score") +
  xlab("Rigidity Score") +
  labs(color="Corona Misinformation Score") +
  theme(
    legend.position="bottom", 
    panel.background = element_rect(fill = "white"),
    panel.grid.major = element_line(colour = "grey70", size = 0.2),
    panel.grid.minor = element_blank())

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.