You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用R的Plotly包实现正负值分置的镜像柱状图?

镜像柱状图绘制问题修正

问题说明

需要绘制镜像柱状图,使正值(上调)显示在X轴上方,负值(下调)显示在X轴下方,但运行以下R代码后,正负值均位于X轴上方,需修正代码实现需求。

原代码

library(plotly)
Region <- c("Cerebellum","Cortex","Hippocampus", "Striatum")
Positive <- c(sum(DataToPlot_Mouse_REJ$Cb_MicREJ > 0),sum(DataToPlot_Mouse_REJ$Ctx_MicREJ > 0),sum(DataToPlot_Mouse_REJ$Hipc_MicREJ > 0),sum(DataToPlot_Mouse_REJ$Str_MicREJ > 0) )

Negative <- c(sum(DataToPlot_Mouse_REJ$Cb_MicREJ < 0),sum(DataToPlot_Mouse_REJ$Ctx_MicREJ < 0),sum(DataToPlot_Mouse_REJ$Hipc_MicREJ < 0),sum(DataToPlot_Mouse_REJ$Str_MicREJ < 0) )


df <- data.frame(Region,Positive,Negative )
plot_ly(df) %>%
    add_trace(x = ~Region, y = ~Positive, type = 'bar', name = 'UpRegulated',
              marker = list(color = '#33adff'),
              hovertemplate = paste('Positive: %{y}',
                                    '
Region: %{x}
')) %>%
    add_trace(x = ~Region, y = ~Negative, type = 'bar', name = 'DownRegulated',
              marker = list(color = '#ff6666'),
              hovertemplate = paste('Negative: %{y}',
                                    '
Region: %{x}
'))

数据集

RegionPositiveNegative
Cerebellum550115
Cortex9097
Hippocampus170128
Striatum41739

当前效果

当前生成的柱状图

修正方案

核心是将代表下调数量的Negative列值转为负数,让plotly将其绘制在X轴下方,同时在悬浮提示中显示绝对值,避免出现负数显示。

修正后的代码:

library(plotly)
Region <- c("Cerebellum","Cortex","Hippocampus", "Striatum")
Positive <- c(sum(DataToPlot_Mouse_REJ$Cb_MicREJ > 0),sum(DataToPlot_Mouse_REJ$Ctx_MicREJ > 0),sum(DataToPlot_Mouse_REJ$Hipc_MicREJ > 0),sum(DataToPlot_Mouse_REJ$Str_MicREJ > 0) )

Negative <- c(sum(DataToPlot_Mouse_REJ$Cb_MicREJ < 0),sum(DataToPlot_Mouse_REJ$Ctx_MicREJ < 0),sum(DataToPlot_Mouse_REJ$Hipc_MicREJ < 0),sum(DataToPlot_Mouse_REJ$Str_MicREJ < 0) )


df <- data.frame(Region,Positive,Negative )
# 将Negative转为负数,实现镜像效果
df$Negative <- -df$Negative

plot_ly(df) %>%
    add_trace(x = ~Region, y = ~Positive, type = 'bar', name = '上调',
              marker = list(color = '#33adff'),
              hovertemplate = paste('上调数量: %{y}',
                                    '<br>区域: %{x}<extra></extra>')) %>%
    add_trace(x = ~Region, y = ~Negative, type = 'bar', name = '下调',
              marker = list(color = '#ff6666'),
              hovertemplate = paste('下调数量: %{y*-1}',
                                    '<br>区域: %{x}<extra></extra>')) %>%
    # 可选:调整Y轴标签,让显示更直观
    layout(yaxis = list(title = '数量', tickformat = 'd'))

修改说明

  • 添加df$Negative <- -df$Negative,将下调数量转为负数,使其显示在X轴下方
  • 调整下调系列的hovertemplate,用%{y*-1}显示绝对值,避免悬浮提示出现负数
  • 可选:优化Y轴标签和格式,提升图表可读性

内容的提问来源于stack exchange,提问作者Huma Naz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 02:53:18