使用大数据框进行绘图时,Plotly Express Box绘图会产生白屏

问题描述 投票:2回答:1

我有以下具有40M行的数据框:

occ_status_pre = ["retired","unemployed","house person","financially independent","employed","student"]

test_df = pd.DataFrame(np.random.randint(0,100,size=(40000000, 4)), columns=["id","occupation_status","age","height"])

occ_status = []
for num in range(0,40000000):
        occ_status.append(random.choice(occ_status_pre))

test_df["occupation_status"] = occ_status
test_df.head()
   id occupation_status  age  height
0  32        unemployed   41      78
1  83           retired   35      99
2  77           retired   61      19
3   8      house person   28      64
4   6        unemployed   46      22

在Seaborn中,我可以成功地为整个数据框创建Box图,而不会出现任何问题:

fig,ax = plt.subplots(figsize=(10,8))
ax = sns.boxplot(x="occupation_status",y="age",data=test_df)
plt.tight_layout()

enter image description here

但是,如果我尝试在Plotly 4.2中重新创建相同的Box图,则会使我的Web浏览器崩溃。

[进一步的调查使我进入了pio.renderers属性。如果我将pio.renderers设置为等于“浏览器”,则它将箱形图可视化输出到新的浏览器选项卡:

fig = px.box(test_df,x="occupation_status",y="age")
fig.show(renderer="browser")

但是,如果我的数据框的行数超过2800万行,则这将仅显示空白屏幕-新选项卡中不会显示任何可视化。

[从进一步的调查来看,如果我的数据框中有更多的列,似乎并不重要,如果我尝试为具有超过2800万行的数据框绘制Box图,那么我将无法绘制它。

我知道有render_mode="webgl"用于处理更大的数据,但我似乎只能为散点图和折线图类型设置它。

所以我的问题是,是否有一种方法可以在Plotly中为大型数据框生成交互式Box图? (同样的问题也适用于小提琴情节。)

如果没有,那么当行数大于2800万行时,阻止绘制图形的限制是什么?

如果无法在Plotly中做到这一点,那么有人知道我可以使用Python生成大数据Box / Violin图的任何其他工具吗?例如,使用ggplot2可能会发生这种情况,还是也会存在相同的限制?

我的最终目标是使用Plotly生成漂亮的交互式图,然后创建使用这些图的Dash仪表板。

非常感谢

23/10/19:附加测试:

我将Plotly降级为3.10.0并获得了相同的结果-没有图形显示,而我只是看到一个白色屏幕。我现在已经再次升级回版本4.2。

此外,我安装了袖扣。我按照此处描述的过程使袖扣与Plotly 4配合使用:https://github.com/santosjorge/cufflinks/pull/203

袖扣行为几乎与Plotly Express行为相同-如果我让图形在笔记本中呈现,则什么也不会发生(没有崩溃/错误,除了单元格本身已标记为运行外,没有任何输出)。如果我按照Cufflinks for plotly: setting cufflinks config options launches中接受的答案将其输出到html文件,则它将生成一个非常大的HTML文件(大约1.5gb),打开后再次显示为白屏。

由于此问题似乎是由于处理大型数据框而引起的,所以我认为Jupyter笔记本可能无法处理如此大量的数据。因此,我尝试按照iopub.data_rate调整https://community.plot.ly/t/tips-for-using-plotly-with-jupyter-notebook-5-0-the-latest-version/4156,但没有任何区别。

[由于我在Plotly Express和袖扣中都经历了非常相似的行为,这向我表明问题一定与Plotly本身有关?

有人为大型数据集制作Box或Violin图成功吗?

python pandas plot plotly data-visualization
1个回答
0
投票

最后,我的解决方案是转向全息视图。

import holoviews as hv
hv.extension('plotly')
boxwhisker = hv.BoxWhisker(test_df, 'occupation_status', 'age')
boxwhisker

出[2]:enter image description here

注意事项:

  1. 当我使用“散景”扩展名时,我的情节已呈现但不是交互式的。但是,当我使用“ plotly”扩展名时,按照上面的方法成功制作了交互式箱形图。这真的很有趣,因为当我尝试直接使用plotly生成此图时,它仍然会使我的浏览器崩溃。

  2. 由于某种原因,我的“职业状态”类别已被截断为单个字母。我正在尝试使用holoviews选择xrotation和xticks,但尚未解决此问题。这不是世界末日,但是修复起来会很不错。

© www.soinside.com 2019 - 2024. All rights reserved.