Python 2个混淆矩阵,1个色条
我想产生两个混淆矩阵,只显示一个色条。我基本上是想和你合并 我的代码如下所示:Python 2个混淆矩阵,1个色条,python,python-3.x,matplotlib,scikit-learn,Python,Python 3.x,Matplotlib,Scikit Learn,我想产生两个混淆矩阵,只显示一个色条。我基本上是想和你合并 我的代码如下所示: import numpy as np import matplotlib.pyplot as plt fig, axes = plt.subplots(nrows=1, ncols=2) classes = ["A", "B"] for i, ax in enumerate(axes.flat): cm = np.random.random((2,2)) im = ax.imshow(cm, vm
import numpy as np
import matplotlib.pyplot as plt
fig, axes = plt.subplots(nrows=1, ncols=2)
classes = ["A", "B"]
for i, ax in enumerate(axes.flat):
cm = np.random.random((2,2))
im = ax.imshow(cm, vmin=0, vmax=1)
plt.title("Title {}".format(i))
tick_marks = np.arange(2)
plt.xticks(tick_marks, classes, rotation=45)
plt.yticks(tick_marks, classes)
for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):
plt.text(j, i, format(cm[i, j], '.5f'),
horizontalalignment="center",
color="white")
plt.ylabel('True label')
plt.xlabel('Predicted label')
plt.tight_layout()
fig.subplots_adjust(right=0.8)
cbar_ax = fig.add_axes([0.88, 0.15, 0.05, 0.6])
fig.colorbar(im, cax=cbar_ax)
plt.show()
但结果是:
因此,所有内容都被绘制在最后一张图像上。
两个问题:
- 我怎样才能把两者分开呢
- 如何在矩阵开始的位置启动颜色栏,即使它没有标签
pyplot
(plt.xxxxx()
)接口与面向对象接口混淆,因此所有元素都绘制在最后一幅图像上。参考或了解一些解释
对于colorbar,有许多方法可以获得适当大小的colorbar(例如,按照@DavidG的建议,使用)。由于您有两个轴使用imshow
,因此我建议使用ImageGrid
,如所示
您的代码应为:
import itertools
from mpl_toolkits.axes_grid1 import ImageGrid
classes = ["A", "B"]
fig = plt.figure()
grid = ImageGrid(fig, 111, # as in plt.subplot(111)
nrows_ncols=(1,2),
axes_pad=0.15,
cbar_location="right",
cbar_mode="single",
cbar_size="7%",
cbar_pad=0.15,
)
for i, ax in enumerate(grid[:2]):
cm = np.random.random((2,2))
im = ax.imshow(cm, vmin=0, vmax=1)
ax.set_title("Title {}".format(i)) # ax.___ instead of plt.___
tick_marks = np.arange(2)
ax.set_xticks(tick_marks) # Warning: different signature for [x|y]ticks in pyplot and OO interface
ax.set_xticklabels(classes, rotation=45)
ax.set_yticks(tick_marks)
ax.set_yticklabels(classes)
for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):
ax.text(j, i, format(cm[i, j], '.5f'),
horizontalalignment="center",
color="white")
ax.set_ylabel('True label')
ax.set_xlabel('Predicted label')
fig.tight_layout()
fig.subplots_adjust(right=0.8)
fig.colorbar(im, cax=ax.cax)
plt.show()
由于将
pyplot
(plt.xxxxx()
)接口与面向对象接口混淆,因此所有元素都绘制在最后一幅图像上。参考或了解一些解释
对于colorbar,有许多方法可以获得适当大小的colorbar(例如,按照@DavidG的建议,使用)。由于您有两个轴使用imshow
,因此我建议使用ImageGrid
,如所示
您的代码应为:
import itertools
from mpl_toolkits.axes_grid1 import ImageGrid
classes = ["A", "B"]
fig = plt.figure()
grid = ImageGrid(fig, 111, # as in plt.subplot(111)
nrows_ncols=(1,2),
axes_pad=0.15,
cbar_location="right",
cbar_mode="single",
cbar_size="7%",
cbar_pad=0.15,
)
for i, ax in enumerate(grid[:2]):
cm = np.random.random((2,2))
im = ax.imshow(cm, vmin=0, vmax=1)
ax.set_title("Title {}".format(i)) # ax.___ instead of plt.___
tick_marks = np.arange(2)
ax.set_xticks(tick_marks) # Warning: different signature for [x|y]ticks in pyplot and OO interface
ax.set_xticklabels(classes, rotation=45)
ax.set_yticks(tick_marks)
ax.set_yticklabels(classes)
for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):
ax.text(j, i, format(cm[i, j], '.5f'),
horizontalalignment="center",
color="white")
ax.set_ylabel('True label')
ax.set_xlabel('Predicted label')
fig.tight_layout()
fig.subplots_adjust(right=0.8)
fig.colorbar(im, cax=ax.cax)
plt.show()
这可能会回答您的第二个问题,从您链接到的问题中,会显示一个解决方案。这可能会回答您的第二个问题,从您链接到的问题中,会显示一个解决方案。