Matplotlib散点图的标记样式

4

我想为这个二元响应数据使用不同的标记样式,但是我无法在此处集成它。我希望可以为一个类使用三角形标记,另一个类使用星形标记。同时,最好使用自定义图例,如1代表多数类,0代表少数类。感谢您的建议。谢谢!

import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm
from sklearn.datasets import make_blobs
from numpy.random import seed
seed(133)
X, y = make_blobs(n_samples=[1000, 10],centers=[[0.0, 0.0], [2.0, 2.0]],cluster_std= [1.5, 0.5],random_state=0, shuffle=False)
colormap = np.array(['tab:orange', 'tab:blue'])
plt.scatter(X[:, 0], X[:, 1],s=40, c=colormap[y], cmap=plt.cm.Paired, edgecolors='k')
1个回答

4

使用seaborn

如果您想使用seaborn,则sns.scatterplot有一个style参数以指定标记组:

style向量或数据中的键

分组变量,将生成具有不同标记的点。可以具有数字dtype,但始终将被视为分类数据。

然后markers参数允许您为每个style级别指定标记:

sns.scatterplot(x=X[:,0], y=X[:,1], s=40, hue=y, style=y, markers=['*','^'])

使用纯Matplotlib

然而,使用纯plt.scattermarker参数只接受单个值,因此您应该为每个类别绘制单独的scatter

带有分组标记的Seaborn散点图

marker = ['*', '^']
for group in set(y):
    plt.scatter(
        X[y==group, 0], X[y==group, 1], # filter by group
        marker=marker[group],           # set marker per group
        label=group,                    # set legend label
        s=40, c=colormap[group], cmap=plt.cm.Paired, edgecolors='k',
    )
plt.legend()

假设你的类别像例子中一样是0和1。如果真实的类别标签不同,你应该枚举循环以访问数字索引:

for index, group in enumerate(set(y)):
   ...

pyplot scatter with grouped markers


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接