2014-06-17 15 views
5

Rozważmy prosty przykład:matplotlib: zapewnienie pełnej dash pojawia się w legendzie

#setup figure 
import matplotlib.pyplot as plt 
import pylab 
import math 
import numpy as np 
#output control 
fig_width_pt = 345.0 # Get this from LaTeX using \showthe\columnwidth 
inches_per_pt = 1.0/72.27    # Convert pt to inch 
golden_mean = (math.sqrt(5)-1.0)/2.0   # Aesthetic ratio 
fig_width = fig_width_pt*inches_per_pt # width in inches 
fig_height = fig_width*golden_mean  # height in inches 
fig_size = [fig_width,fig_height] 
params = {'backend': 'ps', 
     'axes.labelsize': 10, 
     'text.fontsize': 10, 
     'legend.fontsize': 8, 
     'xtick.labelsize': 8, 
     'ytick.labelsize': 8, 
     'text.usetex': True, 
     'figure.figsize': fig_size, 
     'figure.dpi': 1000, 
     'savefig.dpi': 1000} 
pylab.rcParams.update(params) 

plt.figure().add_subplot(1,1,1) 
#plot some lines 
dashes = [(None, None), [2, 2], [7, 4, 3, 4]] 
titles = ["really long title one", "long title the second", "an even longer title, am I right?"] 

for i in range(3): 
    x = np.arange(i, i + np.pi/2.0, 0.01) 
    y = np.sin(x) + i 
    line,= plt.plot(x, y, label = titles[i]) 
    line.set_dashes(dashes[i]) 

plt.legend() 
plt.show() 

Bieganie to prosty program z 'legend.fontsize': 8 produkuje this. Zauważ, że styl kreski dla linii kropkowanej (trzecia w legendzie) jest bardzo trudny do zinterpretowania. Jeśli powiększysz, zobaczysz maleńką czarną kropkę, która pokazuje, że odpowiada ona figurze, ale nie jest to idealne.

Udało mi się to naprawić, zmieniając rozmiar czcionki legendy na dziesięć, w wyniku czego this, ale jest to zbyt duża dla mojej rzeczywistej liczby.

Jakieś przemyślenia na temat tego, w jaki sposób mogę zapewnić, że wyświetlany jest pełny styl linii/dashstyle?

Odpowiedz

9

Możesz zmienić długość linii w legendzie (bez zmiany czcionki), ustawiając słowo kluczowe handlelength. Wypróbuj

plt.legend(handlelength=3) 
+0

Działa jak urok. Dzięki! – arghdos