【发布时间】:2016-07-21 13:59:14
【问题描述】:
我有分类数据,我想绘制使用热图 (geom_tile) 的频率,就像下面的示例:
data("mtcars")
freq <- data.frame(xtabs(~cyl + gear, mtcars)) #count number of 4,6,8 cyl cars by gear
ggplot(freq, aes(cyl, gear)) +
geom_tile(aes(fill = Freq)) +
scale_fill_gradient(low = "white",high = "steelblue")
但我想根据显着或非显着结果(0-1 值)的比例来拆分每个图块。在本例中,我将生成相同的频率计数,但要区分在自动和手动变速箱之间(am)
freq_am <- data.frame(xtabs(~cyl + gear + am, mtcars))
print(freq_am)
#cyl gear am Freq
4 3 0 1
6 3 0 2
8 3 0 12
4 4 0 2
6 4 0 2
8 4 0 0
4 5 0 0
6 5 0 0
8 5 0 0
4 3 1 0
6 3 1 0
8 3 1 0
4 4 1 6
6 4 1 2
8 4 1 0
4 5 1 2
6 5 1 1
8 5 1 2
生成的热图将(例如)blue 表示am==0 的值,red 表示am==1。每个图块将根据自动 (am==0) 或手动 (am==1) 类型汽车的比例划分(沿对角线?)。蓝色和红色的色调将与计数成比例,就像渐变已经反映一样。
例如:
左上角的图块 (4,5) 将完全为浅红色,因为所有 4 缸、5 档汽车(计数 = 2)都是手动的
中间的左侧图块 (4,4) 将是 1/4 蓝色和 3/4 红色,因为 25% 的 4 齿轮、4 缸汽车是自动的(计数 = 2),而 75% 是手动(计数 = 6)
左下方的图块 (4,3) 将完全是最浅的蓝色,因为所有 4 缸、3 档汽车(计数 = 1)都是自动的
【问题讨论】:
-
根据
?mtcarsam定义为传输(0 = 自动,1 = 手动)。在您的问题中,您已经定义了 自动 (am==1) 或手动 (am==0) 和 blue 用于am==1的值和红色用于am==0这只是另一种方式。请问,你能edit你的Q并澄清一下吗? - 谢谢。 -
已修复。感谢您提供澄清和解决方案!
标签: r ggplot2 visualization heatmap