在条形图Matploblib中设置双轴对数

ace*_*ces 5 python matplotlib bar-chart loglog

我已经对数据进行分箱以绘制直方图。因此,我正在使用该plt.bar()功能。我想将绘图中的两个轴都设置为对数刻度。

如果设置plt.bar(x, y, width=10, color='b', log=True),则可以将y轴设置为log,但不能设置x轴为对数。plt.xscale('log')不幸的是,我尝试了这种方法。x轴刻度消失,条形的大小没有相等的宽度。

在此处输入图片说明

我将不胜感激。

Imp*_*est 5

默认情况下,图的条的bar宽度为0.8。因此,对于较小的x值,它们在对数刻度上显得较大。如果不是指定恒定宽度,而是使用bin边缘之间的距离并将其提供给自width变量,则条形图将具有正确的宽度。人们还需要设置align"edge"这个工作。

import matplotlib.pyplot as plt
import numpy as np; np.random.seed(1)

x = np.logspace(0, 5, num=21)
y = (np.sin(1.e-2*(x[:-1]-20))+3)**10

fig, ax = plt.subplots()
ax.bar(x[:-1], y, width=np.diff(x), log=True,ec="k", align="edge")
ax.set_xscale("log")
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

我无法重现缺少的刻度标签以进行对数缩放。这可能是由于问题中未显示的代码中的某些设置,或者是由于使用了较旧的matplotlib版本。此处的示例可与matplotlib 2.0配合使用。