如何用Matplotlib绘制指数分布与泊松分布的并排图?
如何用Matplotlib绘制指数分布与泊松分布的并排图
没问题!要实现两个分布的并排可视化,我们可以借助Matplotlib的子图功能,给连续的指数分布用直方图展示,离散的泊松分布用条形图展示,这样更贴合各自的分布特性。下面是完整的可运行代码,我会帮你修正原代码里的小问题,并详细说明每一步:
完整实现代码
import pandas as pd import numpy as np import matplotlib.pyplot as plt # 1. 生成数据(修正原代码的小细节) mean = 2 step = 0.5 df1 = pd.DataFrame() df1['A'] = pd.Series(abs(np.random.exponential(step, 400))) # 指数分布数据 df2 = pd.DataFrame() df2['B'] = pd.Series(abs(np.random.poisson(mean, 400))) # 泊松分布数据 # 2. 准备汇总统计数据(补全原代码未完成的部分) # 指数分布的频次统计(因为是连续值,也可以直接用直方图,不需要提前汇总) df1_summ = df1.groupby(['A']).size().reset_index(name='counts') df1_summ = df1_summ.sort_values(['counts'], ascending=True) # 泊松分布的频次统计(离散值,汇总后更适合条形图) df2_summ = df2.groupby(['B']).size().reset_index(name='counts') df2_summ = df2_summ.sort_values(['B'], ascending=True) # 3. 创建并排子图 fig, (ax1, ax2) = plt.subplots(nrows=1, ncols=2, figsize=(12, 5)) # 1行2列的布局 # 4. 绘制指数分布的直方图(连续分布用直方图更直观) ax1.hist(df1['A'], bins=20, edgecolor='black', alpha=0.7) ax1.set_title('指数分布数据直方图') ax1.set_xlabel('数值') ax1.set_ylabel('频次') # 5. 绘制泊松分布的条形图(离散分布用条形图更清晰) ax2.bar(df2_summ['B'], df2_summ['counts'], width=0.6, color='#4CAF50') ax2.set_title('泊松分布数据条形图') ax2.set_xlabel('数值') ax2.set_ylabel('频次') # 给泊松的x轴设置整数刻度(因为泊松是离散整数分布) ax2.set_xticks(df2_summ['B']) # 6. 调整子图间距,避免标签重叠 plt.tight_layout() plt.show()
关键细节说明
- 子图布局:用
plt.subplots(nrows=1, ncols=2)创建1行2列的并排子图,figsize可以根据需求调整画布大小。 - 可视化类型选择:
- 指数分布是连续分布,用直方图(
hist)直接展示数据的分布密度,比提前汇总后绘图更准确。 - 泊松分布是离散整数分布,用条形图(
bar)展示每个整数的频次,能更清晰地呈现离散值的分布规律。
- 指数分布是连续分布,用直方图(
- 细节优化:给泊松图的x轴设置整数刻度,符合其离散特性;用
tight_layout()自动调整子图间距,避免标题、标签互相重叠。
内容的提问来源于stack exchange,提问作者bryan.blackbee
相关产品推荐
相关产品推荐

