Matplotlib 在Scikit'中更改颜色;s绘制VotingClassifier决策边界的示例?

Matplotlib 在Scikit'中更改颜色;s绘制VotingClassifier决策边界的示例?,matplotlib,scikit-learn,data-visualization,knn,Matplotlib,Scikit Learn,Data Visualization,Knn,嗨,我正在努力复制 分类部分相当直截了当,在一个图形中绘制多个图的简洁方式非常有趣。然而,我在修改配色方案时遇到了麻烦 这是直接分类部分: from itertools import product import numpy as np import matplotlib.pyplot as plt from sklearn import datasets from sklearn.tree import DecisionTreeClassifier from sklearn.neighbor

嗨,我正在努力复制

分类部分相当直截了当,在一个图形中绘制多个图的简洁方式非常有趣。然而,我在修改配色方案时遇到了麻烦

这是直接分类部分:

from itertools import product
import numpy as np
import matplotlib.pyplot as plt

from sklearn import datasets
from sklearn.tree import DecisionTreeClassifier
from sklearn.neighbors import KNeighborsClassifier
from sklearn.svm import SVC
from sklearn.ensemble import VotingClassifier

# Loading some example data
iris = datasets.load_iris()
X = iris.data[:, [0, 2]]
y = iris.target

# Training classifiers
clf1 = DecisionTreeClassifier(max_depth=4)
clf2 = KNeighborsClassifier(n_neighbors=7)
clf3 = SVC(kernel='rbf', probability=True)
eclf = VotingClassifier(estimators=[('dt', clf1), ('knn', clf2),
                                    ('svc', clf3)],
                        voting='soft', weights=[2, 1, 2])

clf1.fit(X, y)
clf2.fit(X, y)
clf3.fit(X, y)
eclf.fit(X, y)
该示例使用以下代码创建地物:

# Plotting decision regions
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.1),
                     np.arange(y_min, y_max, 0.1))

f, axarr = plt.subplots(2, 2, sharex='col', sharey='row', figsize=(10, 8))

for idx, clf, tt in zip(product([0, 1], [0, 1]),
                        [clf1, clf2, clf3, eclf],
                        ['Decision Tree (depth=4)', 'KNN (k=7)',
                         'Kernel SVM', 'Soft Voting']):

    Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])
    Z = Z.reshape(xx.shape)

    axarr[idx[0], idx[1]].contourf(xx, yy, Z, alpha=0.4)
    axarr[idx[0], idx[1]].scatter(X[:, 0], X[:, 1], c=y,
                                  s=20, edgecolor='k')
    axarr[idx[0], idx[1]].set_title(tt)

plt.show()
matplotlib似乎以某种方式使用了默认的着色方案。有没有办法传递其他颜色?我试着用
c=y
(例如
c=['y','b']
)来摆弄四周,但这并没有奏效


我想改变背景色和分散色。有什么想法吗?

颜色是根据相应绘图的
y
Z
中的值选择的<代码>y的条目数量与点的数量相同,并且有3个唯一值<代码>Z也有3个级别。它们根据matplotlib进行颜色映射

您可以选择不同的颜色映射,例如
cmap=“brg”

完整代码:
将numpy导入为np
将matplotlib.pyplot作为plt导入
从sklearn导入数据集
从sklearn.tree导入DecisionTreeClassifier
从sklearn.neighbors导入KNeighborsClassifier
iris=数据集。加载\u iris()
X=iris.data[:,[0,2]]
y=iris.target
clf1=决策树分类器(最大深度=4)
clf2=KNeighborsClassifier(n_=7)
clf1.拟合(X,y)
clf2.配合(X,y)
x_min,x_max=x[:,0].min()-1,x[:,0].max()+1
y_min,y_max=X[:,1].min()-1,X[:,1].max()+1
xx,yy=np.meshgrid(np.arange(x_最小,x_最大,0.1),
np.arange(y_最小值,y_最大值,0.1))
f、 axarr=plt.子批(1,2,sharex='col',sharey='row',figsize=(5,3))
对于zip中的idx、clf、tt([0,1],[clf1,clf2],
[‘决策树(深度=4)’,‘KNN(k=7)’):
Z=clf.predict(np.c_uuxx.ravel(),yy.ravel())
Z=Z.重塑(xx.形状)
axarr[idx].tourtf(xx,yy,Z,alpha=0.4,cmap=“brg”)
axarr[idx]。散射(X[:,0],X[:,1],c=y,cmap=“brg”,
s=20,edgecolor='w')
axarr[idx]。设置标题(tt)

plt.show()
颜色是根据相应绘图的
y
Z
中的值选择的<代码>y的条目数量与点的数量相同,并且有3个唯一值<代码>Z也有3个级别。它们根据matplotlib进行颜色映射

您可以选择不同的颜色映射,例如
cmap=“brg”

完整代码:
将numpy导入为np
将matplotlib.pyplot作为plt导入
从sklearn导入数据集
从sklearn.tree导入DecisionTreeClassifier
从sklearn.neighbors导入KNeighborsClassifier
iris=数据集。加载\u iris()
X=iris.data[:,[0,2]]
y=iris.target
clf1=决策树分类器(最大深度=4)
clf2=KNeighborsClassifier(n_=7)
clf1.拟合(X,y)
clf2.配合(X,y)
x_min,x_max=x[:,0].min()-1,x[:,0].max()+1
y_min,y_max=X[:,1].min()-1,X[:,1].max()+1
xx,yy=np.meshgrid(np.arange(x_最小,x_最大,0.1),
np.arange(y_最小值,y_最大值,0.1))
f、 axarr=plt.子批(1,2,sharex='col',sharey='row',figsize=(5,3))
对于zip中的idx、clf、tt([0,1],[clf1,clf2],
[‘决策树(深度=4)’,‘KNN(k=7)’):
Z=clf.predict(np.c_uuxx.ravel(),yy.ravel())
Z=Z.重塑(xx.形状)
axarr[idx].tourtf(xx,yy,Z,alpha=0.4,cmap=“brg”)
axarr[idx]。散射(X[:,0],X[:,1],c=y,cmap=“brg”,
s=20,edgecolor='w')
axarr[idx]。设置标题(tt)

plt.show()
使用
edgecolor='w'
可以获得白色边缘,如图所示。由于代码无法运行(缺少变量,到处都是无用的斜杠(```),我不知道还有什么可以帮到你。谢谢你没有否决这个问题。我突出了我的c/p代码,不知怎的,它被斜杠和类似的东西分散了。我清理了它,并使用了原始示例。现在可以完全复制。使用
edgecolor='w'
可以获得白色边缘,如图所示。由于代码无法运行(缺少变量,到处都是无用的斜杠(```),我不知道还有什么可以帮到你。谢谢你没有否决这个问题。我突出了我的c/p代码,不知怎的,它被斜杠和类似的东西分散了。我清理了它,并使用了原始示例。它现在完全可以复制了。这太酷了!非常感谢。我不知道彩色地图。非常有用。非常感谢。回答得很好,但是我如何才能在颜色中添加图例,我在添加图例时遇到了很大的困难,请帮帮我!!这太酷了!非常感谢。我不知道彩色地图。非常有用。非常感谢。回答得很好,但是我如何才能在颜色中添加图例,我在添加图例时遇到了很大的困难,请帮帮我!!
axarr[idx].contourf(xx, yy, Z, alpha=0.4, cmap="brg")
axarr[idx].scatter(X[:, 0], X[:, 1], c=y, cmap="brg",
                              s=20, edgecolor='w')