Легенда управления () для отображения определенных наборов данных - PullRequest
0 голосов
/ 19 сентября 2019

Я пытаюсь отобразить 2 основных набора данных, а именно: «Тип2» (красные квадраты) и «Тип1» (синие круги) в легенде.Тем не менее, поскольку мой сюжет включает в себя подгруппы «Type1» и «Type2» (A, B являются подгруппами каждого), в легенде появляются 4 элемента.Посмотрите, как выглядят мои графики, используя только «Тип»: Запрос на панели ошибок (), добавленный к полоске

Проблема заключается в том, что legend () отображает 4 элемента: красный квадрат, красный квадрат, синий круг, синий крикл, в то время как мне нужно только два из них, то есть красный квадрат, чтобы представлять тип 1, и круг подсказки для типа 2.

Figure1 = plt.figure('Scatter Plot')
Subplot1 = Figure1.add_subplot(1,1,1)

########## PLOT Type2 Data ##################
markers = ['s','s']
colors = ['r', 'r']
grouped = DataFrame.groupby('Type2')

for i,((g,d),m,c) in enumerate(zip(grouped,markers,colors)):
    x = np.random.normal(loc=i,scale=0.2,size=(len(d['Y2'],))) 
    G_object1, _ = Subplot1.errorbar(x, y=d['Y2'], yerr=d['SD2'], 
                  fmt=m, color=c, capsize=3)

XPos = list(range(len(grouped)))
Subplot1.set_xticks(XPos)
Subplot1.set_xticklabels([a for a in grouped.groups])

########## PLOT Type1 Data ##################
markers = ['o','o']
colors = ['b', 'b']
grouped = DataFrame.groupby('Type1')

for i,((g,d),m,c) in enumerate(zip(grouped,markers,colors)):
    x = np.random.normal(loc=i,scale=0.2,size=(len(d['Y1'],))) 
    G_object2,_ = Subplot1.errorbar(x, y=d['Y1'], yerr=d['SD1'], 
                  fmt=m, color=c, capsize=3)

Subplot1.legend(['Type1','Type2'], [G_object1,G_object2])

Любые комментарии высоко ценятся.Большое спасибо заранее.

1 Ответ

0 голосов
/ 19 сентября 2019

Получите доступ к объектам графика с оси, а затем передайте их в легенду:

# do this separately for each graph
ax.errorbar(x,d['Y1'],yerr=d['Err1'], fmt=m, color=c, capsize=3)
ax.errorbar(x,d['Y2'],yerr=d['Err2'], fmt=m, color=c, capsize=3)

# pass line objects into a legend
ax.legend([x for x in ax.lines],['Type1','Type2'], fontsize=15, title_fontsize = 16, loc='upper left', shadow=True)
...