我问人们吸烟已有多少年了,然后我计算了吸烟时间长短导致死亡的风险。让我们假设这些数据:
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。 ,对于吸烟6至10年的人为.3,对于吸烟11至15年的人为.7。
例如,我想将连续的变量years_smoke绘制为直方图,并通过组的风险为列着色,例如热图,其中低死亡风险为绿色,高死亡风险为红色。到目前为止,在评论(以及两个删除的答案)中,建议这样:
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)))
我们将获得与以前完全相同的情节。但是,在使用热图的情况下,这将导致非常不同的颜色,其中所有风险为.1和.3的列都具有几乎相同的绿色,风险组999为非常红色。该问题被标记为重复。但是提供的链接也不会像热图中那样显示颜色,这是因为使用了按因子填充,其中颜色不会依赖于连续变量的实际值。
(数据组成)
答案 0 :(得分:2)
在这种情况下,仅构建自己的直方图可能是最简单的。您提到了在任何情况下都不会出现相同数量的吸烟导致不同风险的情况,因此应该采取以下措施:
library(tidyverse)
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))) %>%
group_by(years_smoke) %>%
summarize(n = n(), risk_death = mean(risk_death))
df %>%
ggplot(aes(x = years_smoke, y = n, fill = risk_death))+
geom_col()
(取决于您的风险值实际是不是平均值的另一种汇总函数,但是平均值适用于您的示例数据。)