Python Matplotlib-图形大小变化的边界(使用imshow)

Python Matplotlib-图形大小变化的边界(使用imshow),python,matplotlib,border,figure,imshow,Python,Matplotlib,Border,Figure,Imshow,我有下面的代码(如下)来生成一个图(一个混淆矩阵),我希望正方形之间有黑线,如下所示: 代码 import numpy as np import matplotlib as mpl from matplotlib.backends.backend_pgf import FigureCanvasPgf mpl.backend_bases.register_backend('pdf', FigureCanvasPgf) pgf_with_rc_fonts = {'figure.figsize': (

我有下面的代码(如下)来生成一个图(一个混淆矩阵),我希望正方形之间有黑线,如下所示:

代码

import numpy as np
import matplotlib as mpl
from matplotlib.backends.backend_pgf import FigureCanvasPgf
mpl.backend_bases.register_backend('pdf', FigureCanvasPgf)
pgf_with_rc_fonts = {'figure.figsize': (15,9.3)} # Usually much longer.
mpl.rcParams.update(pgf_with_rc_fonts)
import matplotlib.pylab as plt
cm = np.array([[0.4, 0.6], [0.9, 0.1]])
classes = ['False', 'True']
plt.clf()
cmap = cmap=plt.cm.Blues
plt.imshow(cm, interpolation='none', cmap=cmap, aspect='equal', vmax=1, vmin=0)
plt.colorbar()
tick_marks = np.arange(len(classes))
plt.xticks(tick_marks, classes)
plt.yticks(tick_marks, classes)
plt.gca().set_xticks(np.arange(-.5, len(tick_marks), 1), minor=True)
plt.gca().set_yticks(np.arange(-.5, len(tick_marks), 1), minor=True)
plt.gca().grid(which='minor', color='k', linestyle='-')
plt.gca().tick_params('both', length=0, width=1, which='minor')
绘图

这将生成以下绘图:

问题区域

恼人的是:要么盒子的高度不正确,要么y轴的小刻度太低。我不知道是哪一个,但它给出了丑陋的边界:


但是,当我删除参数
'figure.figsize':(15,9.3)
时,这不会发生。我不确定到底出了什么问题,但我想要更大的图形尺寸,以获得更好的绘图,因此我可以使用更大的交互式绘图

这是matplotlib中的一个错误。我不知道它是从哪里来的,但总的来说matplotlib 2.0引入了许多这样的错误。尽管如此,您可能会得到一个更好的结果,即将9.3更改为9.2或其他一些值,然后看到它变得更好。如果您愿意,您可以在@ImportanceOfBeingErnest上报告它,但希望堆栈溢出的人可能知道如何解决/规避它。作为一种解决方法,您可以尝试使用
pcolormesh
edgecolor
设置为黑色,而不是
imshow
网格设置为
grid
@user8153,按照建议使用
pcolormesh
edgecolor
,确实提供了一个合理的解决方法(但也有其他问题)。不过,谢谢你的建议,我现在正在使用它。这是matplotlib中的一个bug。我不知道它是从哪里来的,但总的来说matplotlib 2.0引入了许多这样的错误。尽管如此,您可能会得到一个更好的结果,即将9.3更改为9.2或其他一些值,然后看到它变得更好。如果您愿意,您可以在@ImportanceOfBeingErnest上报告它,但希望堆栈溢出的人可能知道如何解决/规避它。作为一种解决方法,您可以尝试使用
pcolormesh
edgecolor
设置为黑色,而不是
imshow
网格设置为
grid
@user8153,按照建议使用
pcolormesh
edgecolor
,确实提供了一个合理的解决方法(但也有其他问题)。不过,谢谢你的建议,我现在正在使用。