显示正确的传说调色板做散点图时

问题描述 投票:0回答:2

愚蠢的方式来绘制散点图

假设我有3类数据,下面的代码可以给我一个完美的图表,正确的传说,我由类绘制出数据类。

import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.datasets import make_blobs
import numpy as np

X, y = make_blobs()

X0 = X[y==0]
X1 = X[y==1]
X2 = X[y==2]

ax = plt.subplot(1,1,1)
ax.scatter(X0[:,0],X0[:,1], lw=0, s=40)
ax.scatter(X1[:,0],X1[:,1], lw=0, s=40)
ax.scatter(X2[:,0],X2[:,1], lw=0, s=40)
ax.legend(['0','1','2'])

enter image description here

更好地绘制散点图方式

但是,如果我有3000类的数据集,上述方法不工作了。 (你不会指望我写对应于每一类3000行,对吧?)所以我想出了下面的绘图代码。

num_classes = len(set(y))
palette = np.array(sns.color_palette("hls", num_classes))

ax = plt.subplot(1,1,1)
ax.scatter(X[:,0], X[:,1], lw=0, s=40, c=palette[y.astype(np.int)])
ax.legend(['0','1','2'])

enter image description here

此代码是完美的,我们就可以绘制出只有1行中的所有类。然而,传说是显示不正确这段时间。

如何保持正确的传说,当我们通过下面的图形图表?

ax.scatter(X[:,0], X[:,1], lw=0, s=40, c=palette[y.astype(np.int)])
python python-3.x matplotlib
2个回答
2
投票

当你有对剧情多“艺术家” plt.legend()效果最好。这是这就是为什么叫plt.legend(labels)工作轻松您的第一个例子中的情况。

如果你担心编写大量的代码行,那么你可以采取for循环的优势。

正如我们可以使用5类这个例子中看到:

import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
import numpy as np

X, y = make_blobs(centers=5)
ax = plt.subplot(1,1,1)

for c in np.unique(y):
    ax.scatter(X[y==c,0],X[y==c,1],label=c)

ax.legend()

enter image description here

np.unique()返回y的独特元素的排序后的数组,通过这些循环,并用它自己的艺术家plt.legend()绘制每个类可以容易地提供的图例。

Edit:

当你做了这可能是更安全的您也可以将标签贴到地块。

plt.scatter(..., label=c)其次plt.legend()


0
投票

为什么就不能做到以下几点?

import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.datasets import make_blobs
import numpy as np

X, y = make_blobs()
ngroups = 3

ax = plt.subplot(1, 1, 1)
for i in range(ngroups):
    ax.scatter(X[y==i][:,0], X[y==i][:,1], lw=0, s=40, label=i)
ax.legend()
© www.soinside.com 2019 - 2024. All rights reserved.