2016-08-29 2 views
0

Я пытаюсь нарисовать легенду под двумя сюжетами (созданными с использованием doublex). Я хочу, чтобы легенда рисовала в нижнем центре, выровненном с 4 столбцами. До сих пор нет успеха. Как я могу сделать легенду относительно всего сюжета, а не только с одним осевым объектом. Любая помощь ?легенда matplotlib внизу рисунка с doublex

import matplotlib.pyplot as plt; 
import numpy as np; 
from matplotlib import rc; 

filename = 'ml.pdf'; 

fig, ax1 = plt.subplots(frameon=False); 
rc('mathtext', default='regular'); 
rc('lines',lw=2.6); 
rc('lines',mew=2.4); 
rc('text', usetex=True); 
x = np.array([5,10,20,50]); 

dp_g = np.array([23.43, 29.93, 36.50, 46.07]); 
mr_g = np.array([25.33, 31.83, 38.39, 47.75]); 
md_g = np.array([24.94, 31.33, 37.80, 47.10]); 
sb_g = np.array([27.01, 34.86, 43.18, 54.35]); 

lns1 = ax1.plot(x,dp_g,'bs:', label="MD\n($\lambda$=.8)"); 
lns2 = ax1.plot(x,mr_g,'bs--',label="MR\n($\lambda$=.1)"); 
lns3 = ax1.plot(x,md_g,'bs-.',label='MD'); 
lns4 = ax1.plot(x,sb_g,'bs-',label="SB\n($\gamma$=.1)"); 


ax1.set_ylabel('CG ($\times$ 100)',color='b',size=14); 
ax1.set_ylim([20,57]); 
ax1.set_xlim([4,51]); 
ax1.set_xticks(x); 
ax1.tick_params(axis='y', which=u'both', length=0, labelsize=14, colors='b'); 
ax1.tick_params(axis='x', which=u'both', length=0, labelsize=14); 

ax2 = ax1.twinx(); 
dp_d = np.array([18.84, 19.55, 20.09, 20.08]); 
mr_d = np.array([19.42, 19.73, 20.06, 20.04]); 
md_d = np.array([19.02, 19.75, 20.28, 20.29]); 
sb_d = np.array([20.81, 19.77, 19.20, 19.03]); 


lns6 = ax2.plot(x,dp_d,'rv:',label="MD\n($\lambda$=.8)"); 
lns7 = ax2.plot(x,mr_d,'rv--',label="MR\n($\lambda$=.1)"); 
lns8 = ax2.plot(x,md_d,'rv-.',label='MD'); 
lns9 = ax2.plot(x,sb_d,'rv-',label="SB\n($\gamma$=.1)"); 

lns = lns1 + lns2 + lns3 + lns4 + lns6 + lns7 + lns8 + lns9; 
labs = [l.get_label() for l in lns]; 

ax2.set_ylabel('LD ($\times$ 100)',color='r',size=14); 
ax2.set_ylim([15,23]); 
ax2.set_xlim([4,51]); 
ax2.set_xticks(x); 
ax2.tick_params(axis='y', which=u'both', length=0, labelsize=14, colors='r'); 
ax2.tick_params(axis='x', which=u'both', length=0, labelsize=14); 

ax1.set_xlabel('\# of items',size=14); 
borderaxespad=2.5, ncol = 1, fontsize='11.5'); 
lgd = ax1.legend(lns, labs, bbox_to_anchor=(1.01,1.0), loc='lower center', borderaxespad=2.5, ncol = 4, fontsize='14'); 

fig.savefig(filename,format='pdf',transparent=True, bbox_extra_artists=(lgd,), bbox_inches='tight'); 
+0

Вам не нужна точка с запятой после каждой строки на Python. – pathoren

ответ

0

Помимо ломаной borderaxespad=2.5, ncol = 1, fontsize='11.5');, я считаю, что вы хотите сделать, это просто удалить bbox_to_anchor=(1.01, 1.0) из легенды четкости. Это приведет к тому, что легенда появится в нижней части сюжета (однако легенда очень широкая, поэтому она будет охватывать всю ширину сюжета).

Смежные вопросы