如何在matplotlib中绘制双对数(Log-Log)直方图
双对数(Log-Log)频率直方图实现方法
你只需要在现有代码的基础上,额外设置x、y轴的缩放模式为对数即可实现双对数展示,可根据需求选择最简修改方案或优化方案:
最简修改方案
直接在原有绘图代码末尾添加两行轴缩放设置即可,无需修改原有绘图逻辑:
import matplotlib.pyplot as plt my_list = [1,2,3,3,3,4,1,2,5,2,10,4,5,3,3,3,2,1] # 原有绘图逻辑 plt.hist(my_list, label='Frequency Distribution of matches') plt.legend() plt.ylabel('Frequency') # 新增双对数设置 plt.xscale('log') plt.yscale('log') plt.show()
优化适配方案
如果你的样本数值跨度较大,默认线性分箱会出现低数值区间箱过窄、高数值区间箱过宽的问题,可以提前生成对数间隔的分箱适配双对数轴:
import numpy as np import matplotlib.pyplot as plt my_list = [1,2,3,3,3,4,1,2,5,2,10,4,5,3,3,3,2,1] # 生成对数间隔的分箱 log_bins = np.logspace(np.log10(min(my_list)), np.log10(max(my_list)), num=10) plt.hist(my_list, bins=log_bins, label='Frequency Distribution of matches') plt.legend() plt.ylabel('Frequency') plt.xscale('log') plt.yscale('log') # 可选:手动设置x轴刻度显示,避免对数刻度标签可读性差 plt.xticks([1,2,3,4,5,10], ['1','2','3','4','5','10']) plt.show()
注意事项
- 只需要单轴对数的话,删掉不需要的
*scale设置即可 num参数用于控制分箱数量,可根据自己的数据分布调整
内容的提问来源于stack exchange,提问作者Math
相关产品推荐
相关产品推荐

