Matplotlib对数刻度与限制关闭底部/顶部图形脊柱

1 投票
1 回答
887 浏览
提问于 2025-04-17 23:42

我想画一个以2为底的对数图,但我总是得到一个没有上下边框的图。

import matplotlib.pyplot as plt
from matplotlib.ticker import ScalarFormatter

def toK (array):
    return map (lambda x: x/1000.0, array)


yy = [2603.76, 41077.89,48961.74, 43471.14]
xx = [1,16,32,64]

ax = plt.subplot(221, axisbg = 'white')
ax.set_xlim(0, 128)


ax.set_xscale('log', basex=2)



ax.plot( xx, toK(yy), label="0%", linestyle='--',  marker='o', clip_on = False)

plt.savefig('./tx2.pdf', bbox_inches='tight')

没有边框的图

我该怎么做才能正确显示呢?

1 个回答

2

这是因为你在使用对数刻度时,限制值设为0。(0在对数刻度上是负无穷大)

把坐标轴的限制设置为包含0,理论上应该会报错,但目前它只是默默地导致一些问题。

如果你想在图上显示0,可以用symlog代替对数。不过在这种情况下,把最小值设为2^-1(也就是0.5)可能更合理。

例如,你可以这样做:

import matplotlib.pyplot as plt
import numpy as np

yy = np.array([2603.76, 41077.89,48961.74, 43471.14])
xx = [1,16,32,64]

fig, ax = plt.subplots()
ax.set_xlim(0.5, 128)

ax.set_xscale('log', basex=2)

ax.plot(xx, yy / 1000, linestyle='--',  marker='o', clip_on=False)
plt.show()

enter image description here

或者使用“symlog”而不是对数刻度:

import matplotlib.pyplot as plt
import numpy as np

yy = np.array([2603.76, 41077.89,48961.74, 43471.14])
xx = [1,16,32,64]

fig, ax = plt.subplots()
ax.set_xlim(0, 128)

ax.set_xscale('symlog', basex=2)

ax.plot(xx, yy / 1000, linestyle='--',  marker='o', clip_on=False)
plt.show()

enter image description here

撰写回答