ggplot2直方图着色问题求助:按体温梯度设置填充色
问题描述
使用ggplot2绘制医院患者体温直方图时,需要实现按体温梯度着色:X轴为体温,低体温(如36℃)用绿色、中等体温(如38℃)用黄色、高体温(如40℃)用红色;Y轴展示各体温区间的出现频次。当前使用的ggplot2代码如下:
ggplot(Hospital, aes(x=BodyTemperature)) + geom_histogram(aes(fill = factor(BodyTemperature))) + scale_x_continuous(breaks = seq(0, 100, by = 10)) + ylab("prevalence") + xlab("BodyTemperature") + ggtitle("Temperature vs. prevalence")
已实现的base R版本可行代码:
color1 <- rep(brewer.pal(1, "Greens")) color2 <- rep("#57c4fa", 0) color3 <- brewer.pal(8, "Reds") hist(Hospital$BodyTemperature[-357], breaks = seq(from = 0, to = 100, by = 10), main = "Temperature vs. prevalence", ylab("prevalence"), xlab("Temperature"), col = c(color1, color2, color3))
需要修正上述ggplot2代码,实现按体温梯度着色的效果。
修正方案
原代码的问题在于将BodyTemperature转为因子后,每个独立体温值对应一个颜色,无法实现梯度着色。以下提供两种贴合需求的修正方式:
方法1:对齐base R的区间固定着色
完全匹配base R代码的区间划分与颜色逻辑,为每个体温区间指定对应颜色:
library(ggplot2) library(RColorBrewer) # 移除异常值,与base R代码保持一致 hospital_clean <- Hospital[-357, ] # 定义区间与对应颜色 breaks <- seq(0, 100, by = 10) color_palette <- c(brewer.pal(1, "Greens"), rep("#57c4fa", 0), brewer.pal(8, "Reds")) ggplot(hospital_clean, aes(x = BodyTemperature)) + geom_histogram(breaks = breaks, aes(fill = cut(BodyTemperature, breaks = breaks))) + scale_fill_manual(values = color_palette, name = "Temperature Range") + scale_x_continuous(breaks = breaks) + labs(y = "prevalence", x = "BodyTemperature", title = "Temperature vs. prevalence")
方法2:平滑梯度着色(更贴合需求描述)
实现从绿到黄再到红的连续颜色渐变,直观体现体温高低的色彩变化:
library(ggplot2) hospital_clean <- Hospital[-357, ] ggplot(hospital_clean, aes(x = BodyTemperature)) + geom_histogram(aes(fill = after_stat(x)), bins = 10) + # bins数量对应步长10的区间数 scale_fill_gradientn(colors = c("green", "yellow", "red"), name = "Body Temperature (℃)", limits = c(30, 42)) + # 可根据实际体温范围调整 scale_x_continuous(breaks = seq(0, 100, by = 10)) + labs(y = "prevalence", x = "BodyTemperature", title = "Temperature vs. prevalence")
关键说明
- 方法1严格对齐base R的区间和颜色设置,适合需要和旧图保持一致的场景;
- 方法2的平滑渐变更符合“低绿中黄高红”的直观需求,视觉上更连贯;
- 两种方案都移除了原数据中的第357行异常值,与base R代码逻辑统一。
内容的提问来源于stack exchange,提问作者Harry Plotter
相关产品推荐
相关产品推荐

