【发布时间】:2019-08-29 13:18:49
【问题描述】:
我问人们吸烟了多少年,然后我计算了吸烟持续时间组的死亡风险。让我们假设这些数据:
df <- data.frame(years_smoke= c(1,2,2,3,3,3,4,5,6, 6,7, 10, 11, 12, 12, 14, 15),
risk_death= c(rep(.1, 8), rep(.3, 4), rep(.7, 5)))
这里的连续变量 years_smoke 被分成三组(1 到 5 年、6 到 10 年和 11 到 15 年),每组都有一个死亡风险值(吸烟 1 到 5 年的人为 0.1 , .3 对于那些吸烟 6 到 10 年的人和 0.7 对于曾经吸烟 11 到 15 年的人)。
我想将计数变量years_smoke 绘制为直方图,并按组的风险对列进行着色,例如热图,其中低死亡风险为绿色,高死亡风险为红色。到目前为止,在 cmets(以及两个已删除的答案中)有人建议这样做:
library(ggplot2)
ggplot(df, aes(years_smoke, fill= factor(risk_death))) + geom_histogram()
但这并没有按预期工作。如果我们将数据更改为
data.frame(years_smoke= c(1,2,2,3,3,3,4,5,6, 6,7, 10, 11, 12, 12, 14, 15),
risk_death= c(rep(.1, 8), rep(.3, 4), rep(999, 5)))
我们会得到和以前一样的情节。但是在热图的情况下,这应该会导致颜色非常不同,其中风险为 0.1 和 0.3 的所有列都具有几乎相同的绿色,而风险组 999 具有非常红色的颜色。此问题已标记为重复。但是提供的链接也没有像热图中那样给出颜色,因为使用了填充因子,其中颜色不依赖于连续变量的实际值。
(数据是编出来的)
【问题讨论】:
-
我不明白如何从单个标量变量绘制有意义的热图。你最后的情节对我来说没有意义。
-
@ziggystar 最后一张图显示,更高的 x 值风险正在增加。我为此添加了一个图例。当然,直方图通常看起来不是那样的。我生成了一个均匀分布,因为这很容易用 rep(...) 来完成。但分布与问题无关。
-
你想要一个柱状图,柱的高度显示不同风险级别的频率吗?这将是一个直方图,其条形颜色与 x 比例成正比。
-
@ziggystar 我需要一个直方图,其中列的高度反映了连续变量 x 的计数,并且直方图应该像热图一样着色,具体取决于另一个连续变量风险。我添加了一个图例。
标签: r ggplot2 histogram heatmap