如何为pyspark.pandas.frame.DataFrame生成图例正确的饼图
问题原因
pyspark.pandas.frame.DataFrame自带的.plot.pie()方法是基于matplotlib封装的简易绘图接口,既不兼容你当前使用的plotly绘图逻辑,也不支持直接透传自定义图例、标题样式的参数,所以无法直接生成和pandas+plotly版本效果一致的饼图。
解决方案
值计数的统计结果数据量极小,只需要把pyspark pandas上统计得到的频次结果转成本地pandas对象,就能完全复用你已经写好的plotly绘图代码,效果100%对齐,没有额外性能开销。
完整可运行代码如下:
import plotly.graph_objects as go # 在pyspark pandas端完成值计数,转成本地pandas Series piefreq = final_psdf['Target'].value_counts().to_pandas() # 原有pandas版本绘图逻辑无需修改,直接复用 fig = go.Figure(data=[go.Pie( labels=['Yes (n=' + str(piefreq[1]) +')','No (n=' + str(piefreq[0]) +')'], values=piefreq.values )]) fig.update_layout(title={ 'text': "<b>Pie chart by target</b>", 'y':0.9, 'x':0.45, 'xanchor': 'center', 'yanchor': 'top' }) fig.show()
注意事项
- 不要直接对未调用
to_pandas()的pyspark pandas Series做piefreq[0]、piefreq[1]这类索引取值,分布式对象的索引逻辑和本地pandas不一致,容易取错值或者触发计算异常。 - 如果强行使用pyspark pandas自带的pie接口,需要拿到方法返回的matplotlib轴对象手动修改图例、标题样式,最终样式无法和plotly版本完全对齐,不推荐使用。
内容的提问来源于stack exchange,提问作者gracenz
相关产品推荐
相关产品推荐

