基于标签的散点图中不同的标记

时间:2021-02-18 04:48:13

标签: python for-loop matplotlib scatter-plot markers

我想将不同模型和方法的验证结果散点图。 “Train”和“Validation”数据点都将以不同的颜色绘制(已经完成)。除此之外,我想为不同的模型使用不同的标记,如下所示:

  • 模型 1,训练集:标记 “triangle_down” 颜色为“红色”
  • 模型 1,验证集:标记 “三角形向下”,颜色为“蓝色”
  • 模型 2,训练集:标记 “八边形”,颜色为“红色”
  • 模型 2,验证集:标记 “八边形”,颜色为“蓝色”

The dataframe looks like this

我有以下函数体

k=1
label=['Train', 'Validation']
drop_learners=[]
drop_cols=[]

train_summary = self_summary_train.drop(drop_learners).drop(drop_cols, axis=1)
validation_summary = self_summary_validation.drop(drop_learners).drop(drop_cols, axis=1)

plot_data = pd.concat([self_summary_train, self_summary_validation])
plot_data['label'] = [i.replace('Train', '') for i in plot_data.index]
plot_data['label'] = [i.replace('Validation', '') for i in plot_data.label]

fig, ax = plt.subplots()
fig.set_size_inches(12, 8)
xs = plot_data['Abs % Error of ATE']
ys = plot_data['MSE']
group = np.array([label[0]] * self_summary_train.shape[0] + [label[1]] * self_summary_validation.shape[0])
cdict = {label[0]: 'red', label[1]: 'blue'}

for g in np.unique(group):
        ix = np.where(group == g)[0].tolist()
        ax.scatter(xs[ix], ys[ix], c=cdict[g], label=g, s=100)

for i, txt in enumerate(plot_data.label[:]):
        ax.annotate(txt, (xs[i] + 0.005, ys[i]))
        
ax.set_xlabel('Abs % Error of ATE')
ax.set_ylabel('MSE')
ax.set_title('Learner Performance (averaged over k={} simulations)'.format(k))
ax.legend(loc='center left', bbox_to_anchor=(1.1, 0.5))
plt.show()

我已经尝试在 for 循环中将 scatter-function 中的标记设置为

  • markerdict = {learners[0]: ".", learners[1]: 'v', learners[2]: "^", learners[3]: "1", learners[4]: "2", learners[5]: "8", learners[6]: "p",learners[7]:"*", learners[8]:"d"}
  • markers=['^', 's', 'p', 'h', '8']
    但没有成功。

也许有人可以在这里帮助我,提前致谢!

1 个答案:

答案 0 :(得分:0)

看看这是否可行:

markers=['^', 's', 'p', 'h', '8']
for idx, g in enumerate(np.unique(group)):
    ix = np.where(group == g)[0].tolist()
    ax.scatter(xs[ix], ys[ix], c=cdict[g], label=g, s=100, marker = markers[idx])