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

如何调整Plotly漏斗图各分层宽度以解决底部标签难以读取的问题

可以实现,以下是两种可行的解决方案,适配你提供的代码场景:

方案1:自定义各漏斗阶段宽度(优先级最高)

Plotly原生漏斗的宽度默认和x数值严格成正比,我们可以通过自定义缩放系数调整每个阶段的宽度,同时手动指定显示的文本为真实数值,不会干扰数据含义:

# 定义各阶段的自定义宽度缩放系数,越靠后阶段放大倍数越高,可按需调整
width_scale <- c(1,1,1,1.2,1.8,2.5)
# 各城市真实x值
mtl_x <- c(120, 60, 30, 20, 10, 5)
tor_x <- c(100, 60, 40, 30, 20, 10)
van_x <- c(90, 70, 50, 30, 10, 5)
# 计算缩放后的x用于控制漏斗宽度
mtl_x_scaled <- mtl_x * width_scale
tor_x_scaled <- tor_x * width_scale
van_x_scaled <- van_x * width_scale

fig <- plot_ly(height = 1200, width = 800,
    type = "funnel",
    name = 'Montreal',
    y = c("Website visit", "Downloads", "Potential customers", "Requested price", "invoice sent", "Finalized"),
    x = mtl_x_scaled,
    # 手动指定显示真实数值和初始占比
    text = paste0(mtl_x, " (", round(mtl_x/mtl_x[1]*100,1), "%)"),
    textinfo = "text") 
fig <- fig %>%
    add_trace(
        type = "funnel",
        name = 'Toronto',
        orientation = "h",
        y = c("Website visit", "Downloads", "Potential customers", "Requested price", "invoice sent", "Finalized"),
        x = tor_x_scaled,
        # 手动指定显示真实数值和上一阶段占比
        text = c(paste0(tor_x[1], " -"), paste0(tor_x[-1], " (", round(tor_x[-1]/tor_x[-length(tor_x)]*100,1), "%)")),
        textposition = "inside",
        textinfo = "text") 
fig <- fig %>%
    add_trace(
        type = "funnel",
        name = 'Vancouver',
        orientation = "h",
        y = c("Website visit", "Downloads", "Potential customers", "Requested price", "invoice sent", "Finalized"),
        x = van_x_scaled,
        # 手动指定显示真实数值和总占比
        text = paste0(van_x, " (", round(van_x/sum(van_x)*100,1), "%)"),
        textposition = "outside",
        textinfo = "text") 
fig <- fig %>%
    layout(
      yaxis = list(categoryarray = c("Website visit", "Downloads", "Potential customers", "Requested price", "invoice sent", "Finalized")),
      # 隐藏x轴避免缩放后的数值干扰阅读
      xaxis = list(showticklabels = FALSE)
    )

fig

方案2:优化标签显示参数(无需修改数据逻辑)

如果不想调整漏斗宽度,可以通过以下参数优化标签可读性:

  • 将所有textposition设置为auto,Plotly会自动把窄区域的标签移到外侧
  • 调整统一文本规则,避免过小的文字和挤压
  • 进一步加大图表高度,增加每个漏斗阶段的垂直空间
    修改后的布局代码示例:
fig <- fig %>%
    layout(
      yaxis = list(categoryarray = c("Website visit", "Downloads", "Potential customers", "Requested price", "invoice sent", "Finalized")),
      height = 1500,
      uniformtext = list(minsize = 11, mode = "show")
    )

两种方案可以组合使用,你可以根据自己的展示需求调整缩放系数和字体参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 09:36:03