如何用matplotlib绘制X轴为对数刻度且条形间有间隔的柱状图
问题原因
固定宽度0.000001不符合对数轴的显示逻辑:对数坐标轴上不同数量级的位置对宽度的感知差异极大,极小的固定宽度在x值较大的位置会几乎缩成细线,自然无法得到均匀的柱状图效果。
解决方案
将每个柱子的宽度设置为对应x值的固定比例,这样所有柱子在对数轴上的视觉宽度一致,且自动留出均匀间隔,修改后的代码如下:
import matplotlib.pyplot as plt import numpy as np fig = plt.figure() x = [0.000001,0.00001,0.0001,0.001,0.01,0.1,1.0] height = [5.3,1.8,8.24,5.8,2.8,3.3,4.2] # 宽度设为当前x值的40%,调整比例即可改变柱子宽度和间隔大小 width = [i * 0.4 for i in x] plt.bar(x, height, width=width, color='b' ) plt.xscale("log") # 可选:设置x轴刻度显示为实际的x值,更易读 plt.xticks(x, x) plt.savefig('SimpleBar.png') plt.show()
如果需要调整柱子间隔,只要修改0.4这个比例即可:比例越小,柱子越窄,间隔越大。
内容的提问来源于stack exchange,提问作者manas
相关产品推荐
相关产品推荐

