Python 如何创建每个点有两种颜色的散点图?

Python 如何创建每个点有两种颜色的散点图?,python,matplotlib,scatter-plot,Python,Matplotlib,Scatter Plot,我正试图在matplotlib中同时绘制基本事实和我的分类 目前,在特征空间上应用tsne并使用以下代码添加边后,我仅绘制地面真相 从matplotlib.collections导入LineCollection cols=['rgbkm'[lbl]表示列表中的lbl(data.y.cpu().numpy()-1)] lc=线集合(X_嵌入[out_dict['Edge']],线宽=0.05) 图=plt.图() plt.gca().add_集合(lc) plt.xlim(X_embedded[:

我正试图在matplotlib中同时绘制基本事实我的分类

目前,在特征空间上应用
tsne
并使用以下代码添加边后,我仅绘制地面真相

从matplotlib.collections导入LineCollection
cols=['rgbkm'[lbl]表示列表中的lbl(data.y.cpu().numpy()-1)]
lc=线集合(X_嵌入[out_dict['Edge']],线宽=0.05)
图=plt.图()
plt.gca().add_集合(lc)
plt.xlim(X_embedded[:,0].min(),X_embedded[:,0].max())
plt.ylim(X_embedded[:,1].min(),X_embedded[:,1].max())
plt.散射(X_嵌入[:,0],X_嵌入[:,1],c=cols)
这给出了以下曲线图:

同时,我希望通过以下方式为每个顶点着色:


这里有两种方法

规则散点图的点可以有内部颜色和边缘颜色<代码>分散接受其中一个的数组,但不同时接受两个的数组。因此,您可以迭代所有边颜色,并在同一个绘图上循环绘制它们。 使用线宽可能有助于将真实颜色和预测的颜色一起可视化

Matplotlib的
plot
函数接受标记,该标记可能是上下或左右双色的。每个绘图只能提供一种类型的样式。因此,对于5种颜色,有25种组合可以在一个循环中绘制

奖励积分: 在循环颜色时,plot可以生成带有相应双色点的图例标签

下面是一些代码来说明这些概念:

从matplotlib导入pyplot作为plt
从matplotlib.collections导入LineCollection
将numpy作为np导入
N=50
标签=['ant'、'bee'、'cat'、'dog'、'elk']#假设这些是预测的标签
颜色=列表(“rgbkm”)#5种颜色的列表
cols_true=np.repeat(范围(5),N)#假设前N个真彩色为0,下N个真彩色为1。。。
cols_pred=np.random.randint(0,5,N*5)#作为演示,为每个预测颜色取一个随机数
#对于x和y,假设一些中心周围的二维高斯正态分布,
#这将使“真实”颜色很好地分组
x=np.concatenate([5,9,7,2,2]]中的cx为[np.random.normal(cx,2,N)])
y=np.连接([2,5,9,8,3]]中的cy的[np.随机.normal(cy,1.5,N)])
图,ax=plt.子批次(图尺寸=(10,6))
对于范围(5)内的tc:
对于范围(5)内的pc:
掩码=(cols_true==tc)和(cols_pred==pc)
plt.plot(x[mask],y[mask],c=colors[tc],markerfacecoloralt=colors[pc],
marker='',linestyle='',MarkerEdge Color='None',
markersize=15,fillstyle='left',markeredgewidth=0,
label=f'Tr:{labels[tc]}-Pr:{labels[pc]}')
plt.图例(loc='右上角',bbox_至_锚=(1,-0.1),fontsize=10,ncol=5)
plt.紧_布局()
plt.show()

您希望每个点都是半红半蓝,方向与您显示的方向相同吗?或者颜色的任何部分都依赖于某个变量吗?基本真理和我的分类同时存在,这意味着我希望它们由某个变量设置,而该变量对应于什么?这个记号笔有多少是红色的,有多少是蓝色的?每一半的颜色(即alpha值,或不同的阴影)?不,我会为每个顶点提供两种分类,例如1-3对应于黑色/红色,或3-5对应于红色/蓝色。哇,我认为这是不可能的,在你的帖子之前使用了边缘方案(正如你也提到的)。太神了