具有限制的Matplotlib对数刻度将关闭底部/向上绘图脊柱

时间:2014-03-24 18:06:32

标签: python 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')

Unboder plit

我该如何正确地做到这一点?

1 个答案:

答案 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()

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