我想在散点图中按年份注释我的情节。另外,我还想在pandas数据框中的不同列上标记(添加图例),在本例中为列:ds ['Label']。我已设法用多年来注释分散,但我仍然坚持如何标记来自不同列的数据。
这是我的示例代码
ds
Label Year factor1 factor2 factor3 factor4
0 A 2013 0.318451 0.038893 -0.145478 0.023298
1 B 2013 0.327400 -0.083985 -0.164712 -0.216095
2 C 2013 0.262333 0.251492 0.095186 -0.062729
3 D 2013 0.035074 -0.044357 -0.464473 -0.096461
4 E 2013 0.214464 -0.131810 0.065335 -0.339014
5 F 2013 -0.456510 0.111790 0.358160 0.327663
6 A 2012 0.345147 -0.010345 -0.139058 -0.033598
7 B 2012 0.318605 -0.096974 -0.168039 0.240126
8 C 2012 0.387761 0.145134 0.025229 -0.009165
9 D 2012 -0.007707 -0.033737 -0.401118 0.147932
10 E 2012 0.204582 -0.112144 0.007970 0.367639
11 F 2012 -0.439852 0.128267 0.355429 -0.375302
ds.columnsx=ds['factor2']
y=ds['factor1']
colors = {'A': 'b','B': 'purple', 'C': 'r','D' : 'grey','E' : 'green', 'F' : 'magenta'}
size= 2 *500
x=df['factor2']
y=df['factor1']
labels=df['Year']
fig=figure(1, figsize=(10,8))
ax1 = fig.add_subplot(111)
ax1.scatter(x, y, s=size, alpha=0.7, label=labels, color=[colors[i] for i in ds['Label']])
for label, x, y in zip(labels, x, y):
plt.annotate(label, xy = (x, y),fontsize = 15)
grid(True)
ax1.spines['bottom'].set_color('orange')
ax1.spines['left'].set_color('green')
ax1.xaxis.label.set_color('orange')
ax1.yaxis.label.set_color('green')
ax1.tick_params(axis='x', colors='k')
plt.title('Something', fontsize = 15)
plt.xlabel('Something')
plt.ylabel('Something')
plt.tight_layout()
plt.show()
答案 0 :(得分:1)
你的问题有点不清楚但我想你想要一个与ds['Label']
中的标签相对应的图例。这样做的方法是为每组点数调用ax1.scatter
一次,如this question中所示。例如:
colors = {'A': 'b','B': 'purple', 'C': 'r','D' : 'grey','E' : 'green', 'F' : 'magenta'}
size= 1000
fig1, ax1 = plt.subplots(figsize=(10,8))
for t in ('A','B','C'):
ax1.scatter(ds[ds['Label']==t]['factor2'], ds[ds['Label']==t]['factor1'],
color=colors[t],
label=t,
s=size,
alpha=0.7)
for label, x, y in zip(ds['Year'], ds['factor2'], ds['factor1']):
ax1.annotate(label, xy = (x + 0.008, y - 0.003),fontsize = 15)
ax1.legend(markerscale=0.2)
会给你一个带标签的图例。这就是你要找的东西吗?