使用列表批量绘制px.histogram直方图失败,求问题排查
问题分析与解决方案
你的批量绘制代码出问题,核心是混用了Plotly和Matplotlib两个库的绘图逻辑,这俩是独立的可视化工具,不能这么混搭着用。具体问题点:
plt.figure()是Matplotlib创建画布的方法,但你用的是Plotly的px.histogram(),生成的是Plotly专属的Figure对象,和Matplotlib的画布不兼容。plt.title(column)是给Matplotlib的图加标题,对Plotly的图完全不起作用。plt.show(fig)用法错误:Matplotlib的plt.show()不需要传参数,而且Plotly的图得用自身的fig.show()方法来显示。
修正后的纯Plotly批量代码
直接用Plotly自身的API来实现批量绘制,逻辑更清晰:
for column in ['gender', 'Near_Location', 'Partner', 'Promo_friends', 'Contract_period']: # 生成Plotly直方图 fig = px.histogram( gym, x=column, # 直接传列名字符串即可,无需写成gym[column] y='Phone', color='Churn', barmode='relative', template='simple_white' ) # 用Plotly的方法设置标题 fig.update_layout(title_text=f"直方图:{column}", title_x=0.5) # 显示Plotly图表 fig.show()
补充说明
- 关于
x参数:Plotly Express支持直接传入列名字符串(比如x=column),没必要写成x=gym[column],两种写法都能运行,但前者更简洁。 - 如果一定要结合Matplotlib的布局(比如统一设置画布大小),可以把Plotly的图转换成Matplotlib对象,但这种方式会丢失Plotly的交互性,一般不推荐:
import matplotlib.pyplot as plt for column in ['gender', 'Near_Location', 'Partner', 'Promo_friends', 'Contract_period']: fig = px.histogram( gym, x=column, y='Phone', color='Churn', barmode='relative', template='simple_white' ) # 转换为Matplotlib对象 mpl_fig = fig.to_mpl() mpl_fig.set_size_inches(5, 5) mpl_fig.suptitle(column) plt.show()
内容的提问来源于stack exchange,提问作者Anna Zhabina
相关产品推荐
相关产品推荐

