Matplotlib对数刻度与限制关闭底部/顶部图形脊柱
我想画一个以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()
或者使用“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()