Plotly:如何处理堆叠漏斗图中不同的文本大小?

Plotly: How to handle varying text sizes in a stacked funnel plot?

我正在尝试生成活动的堆积漏斗图。标签未按预期出现在图中。

首先是我的代码:

import pandas as pd
import plotly.express as px

stages = ["Initial Landing", "Step 2", "Step 3", "Added to cart", "Purchased"]
regiona_plotly = pd.DataFrame(dict(number=[10866,10543,1067,1032,108], stage=stages))
regionb_plotly = pd.DataFrame(dict(number=[10650,10432,1076,1036,1012], stage=stages))
regiona_plotly['region'] = "Region A"
regionb_plotly['region'] = "Region B"
df = pd.concat([regiona_plotly, regionb_plotly], axis=0)
fig = px.funnel(df, x='number', y='stage', color='region')
fig.update_traces(textposition='auto')
fig.update_layout(autosize=True)
fig.write_image("region_funnel.png")

(几乎完全来自 plotly documents

此代码生成如下图像:

请注意,在“第 3 步”、“已添加到购物车”和“已购买”中,区域 A 的文本缩放得非常小并位于栏内,但区域 B 位于栏外。

我尝试更新这一行:

fig.update_traces(textposition='outside')

但是,有了这个,我得到了漏斗区域 B 侧的两个值重叠。此外,文本超出了上部波段的情节。

如何使文本大小相同,如果适合该大小则在栏内,如果不适合则在栏外和正确的一侧?

简答:

这似乎是一个错误。如果您需要 .png 您的身材图片,运行:

import plotly
plotly.offline.plot(fig, filename='funnel.html')

然后使用用户界面相机图标生成 .png 版本:

结果:


详情:

这很奇怪。并且很可能是 plotly 社区论坛感兴趣的错误。我有一个解决方法。假设你实际上想要在这里结束的是你的情节的 .png 图像文件。

如果您 运行 您在 JupyterLab 中的确切代码,但将行 fig.write_image("region_funnel.png") 替换为 fig.show(),您将得到:

那里没有小文字!如果我理解正确,没有改变文字大小的数字将是一个令人满意的解决方案?但是 fig.show() 创建了一个 html 对象,而不是 .png 图像。所以我测试了 fig.write_image() 的可用输出选项,它们是:

  • 'png'
  • 'jpg' 或 'jpeg'
  • 'webp'
  • 'svg'
  • 'pdf'
  • 'eps'(需要安装poppler库)

我排除了 webpeps 作为可行的解决方案,并测试了其余的解决方案。每个人都产生了相同的、不需要的、不同大小的文本。即使在 JupyterLab 中使用 fig.show() 生成图形,然后使用用户界面相机图标手动下载文件也会产生完全相同的结果 即使 html 版本看起来不错.

但是如果你运行:

import plotly
plotly.offline.plot(fig, filename='funnel.html')

然后然后下载一个.png版本你会得到这个:

如果我理解正确的话,这对你来说应该是一个可行的选择。诚然,这远不是一个完美的答案,但我希望你会发现它仍然有用。