我正在尝试制作一个日志(基础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')
我该如何正确地做到这一点?
答案 0 :(得分:2)
那是因为你在使用对数刻度时有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()