在Python的matplotlib中使用对数坐标作图的问题

3 投票
2 回答
11372 浏览
提问于 2025-04-15 21:56

我想在matplotlib中把一些数字用散点图的方式绘制出来,并且使用对数坐标。x轴和y轴的数值范围差别很大,其中一个变量的范围几乎是从0到12000000,而另一个变量的范围则是在0到2之间。我觉得把这两个变量都用对数坐标来绘制可能会更好。

我尝试了以下代码,选取了这两个变量的一部分值:

fig = plt.figure(figsize=(8, 8))
ax = fig.add_subplot(1, 1, 1)
ax.set_yscale('log')
ax.set_xscale('log')
plt.scatter([1.341, 0.1034, 0.6076, 1.4278, 0.0374],
        [0.37, 0.12, 0.22, 0.4, 0.08])

虽然x轴看起来是对数坐标,但点却没有显示出来——只出现了两个点。你知道怎么解决这个问题吗?另外,我该如何让这个对数坐标显示在一个正方形的坐标轴上,这样我就可以从散点图中更好地理解这两个变量之间的关系?

谢谢。

2 个回答

2

你也可以这样做,

plt.loglog([1.341, 0.1034, 0.6076, 1.4278, 0.0374], 
                     [0.37, 0.12, 0.22, 0.4, 0.08], 'o')

这样可以生成你想要的图表,并且坐标轴的比例也很合适,不过它的灵活性没有真正的散点图那么高。

3

我不太明白你为什么只得到那两个点。对于这种情况,你可以手动调整范围,确保所有的点都能显示出来。我运行了:

import matplotlib.pyplot as plt

fig = plt.figure(figsize=(8, 8)) # You were missing the =
ax = fig.add_subplot(1, 1, 1)
ax.set_yscale('log')
ax.set_xscale('log')
plt.scatter([1.341, 0.1034, 0.6076, 1.4278, 0.0374],
        [0.37, 0.12, 0.22, 0.4, 0.08])
plt.xlim(0.01, 10) # Fix the x limits to fit all the points
plt.show()

我不太明白 "另外,我怎么才能让这个对数刻度出现在一个方形坐标轴上,这样就能从散点图中理解两个变量之间的关系?" 这句话是什么意思。也许其他人能理解,或者你可以再解释一下吗?

撰写回答