如何使用plt.savefig正确显示足够的刻度标记?

时间:2017-12-18 15:26:45

标签: python matplotlib axis-labels

运行下面的代码后,轴刻度标记全部重叠。此时,当plt.show()弹出缩放时,每个标记仍然可以具有良好的分辨率。但是,plt.savefig('fig.png')保存的数字将失去其分辨率。这也可以优化吗?

enter image description here

from matplotlib.ticker import FuncFormatter
from matplotlib.pyplot import show
import matplotlib.pyplot as plt
import numpy as np

a=np.random.random((1000,1000))

# create scaled formatters / for Y with Atom prefix
formatterY = FuncFormatter(lambda y, pos: 'Atom {0:g}'.format(y))
formatterX = FuncFormatter(lambda x, pos: '{0:g}'.format(x))

# apply formatters 
fig, ax = plt.subplots()
ax.yaxis.set_major_formatter(formatterY)
ax.xaxis.set_major_formatter(formatterX)

plt.imshow(a, cmap='Reds', interpolation='nearest')

# create labels
plt.xlabel('nanometer')
plt.ylabel('measure')
plt.xticks(list(range(0, 1001,10)))
plt.yticks(list(range(0, 1001,10)))

plt.savefig('fig.png',bbox_inches='tight')
plt.show()

1 个答案:

答案 0 :(得分:2)

我认为您可以通过设置图形的大小来解决它,例如

fig, ax = plt.subplots()
fig.set_size_inches(15., 15.)

正如@PatrickArtner在评论中指出的那样,你也可以通过

来避免x-ticks的重叠
plt.xticks(list(range(0, 1001, 10)), rotation=90)

而不是

plt.xticks(list(range(0, 1001,10)))

其余代码完全不变;然后输出看起来合理(但是太大而无法在此处上传)。