ggplot2中geom_col柱状图负值未显示在x轴下方问题求助
问题原因及解决方案
1. 高概率:y轴取值被识别为非数值类型
如果你的三个趋势系数列(avg_trend_coeff/min_trend_coeff/max_trend_coeff)被存储为字符型、因子型,ggplot无法识别负值的数值属性,会统一将所有值作为正向分类绘制柱状图。
你可以先运行下面的代码验证变量类型:
# 查看原始系数列的类型 str(df_mtx[,c("avg_trend_coeff", "min_trend_coeff", "max_trend_coeff")])
如果确实是非数值类型,在长表转换后新增一步类型转换即可,修正后的代码如下:
coef_plot1 <- df_mtx %>% filter(test_parameter=="weight_dry") %>% pivot_longer(c(avg_trend_coeff, min_trend_coeff, max_trend_coeff), names_to="trend_coeff_type", values_to="trend_coeff_value") %>% # 新增:将y轴变量转为数值型 mutate(trend_coeff_value = as.numeric(trend_coeff_value)) %>% ggplot(aes(x=plant, y=trend_coeff_value, fill=trend_coeff_type))+ geom_col(position='dodge') print(coef_plot1)
2. 中概率:数据本身不存在负值
如果变量类型确实是数值型,你可以先查看转换后数据的取值范围,确认是否存在小于0的数值:
df_mtx %>% filter(test_parameter=="weight_dry") %>% pivot_longer(c(avg_trend_coeff, min_trend_coeff, max_trend_coeff), names_to="trend_coeff_type", values_to="trend_coeff_value") %>% pull(trend_coeff_value) %>% range()
如果返回的最小值≥0,说明是数据预处理阶段不小心对系数做了取绝对值等操作,修正数据处理逻辑即可。
3. 低概率:y轴设置了正向转换
检查你的代码中是否给y轴加了平方根、对数等仅支持正数的尺度转换,这类转换会强制把负值转为缺失值,仅绘制正向数值。如果有这类scale_y_*配置项删除即可。
内容的提问来源于stack exchange,提问作者Hamdi Demirci
相关产品推荐
相关产品推荐

