【问题标题】:marker style of a scatterplot matplotlib散点图 matplotlib 的标记样式
【发布时间】:2021-10-10 23:24:35
【问题描述】:

我想为这个二进制响应数据使用不同的标记样式。但是,我无法在这里集成一个。我有兴趣为一个班级使用三角形标记,并为另一个班级开始标记。此外,最好使用自定义图例,例如 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')

【问题讨论】:

  • 现在解决了吗?如果是这样,请考虑接受答案。如果没有,请随时详细说明什么不起作用。

标签: python matplotlib scikit-learn


【解决方案1】:

使用 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

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,就像您的示例一样。如果真正的类被标记了别的东西,你应该enumerate循环来访问一个数字索引:

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

【讨论】:

    猜你喜欢
    • 2013-03-05
    • 2013-05-22
    • 2017-12-13
    • 2012-02-23
    • 1970-01-01
    • 1970-01-01
    • 2016-07-23
    • 2016-07-26
    相关资源
    最近更新 更多