2016-01-04 2 views
0

J'essaie de créer une figure de ligne avec quatre styles de trait différents. J'ai des valeurs moyennes pour l'axe y et l'erreur pour chaque valeur y. Parce que je veux que tout soit de la même couleur (noir), je veux les différencier par des styles de lignes différents, mais avec mon code ci-dessous, j'obtiens une belle ligne continue pour les quatre styles. Qu'est-ce que je fais mal?Matplotlib: obtention d'un trait fin en plus du style de ligne spécifié

import matplotlib.pyplot as plt 
import numpy as np 

xl = [1, 2, 3, 4, 5, 6] 

a_mean = [17, 15, 20, 22, 18, 16] 
a_se = [1, 2, 1, 3, 1.5, 2] 
b_mean = [5, 6, 2, 5, 1, 9] 
b_se = [1, 2, 0.3, 1, 2, 1] 
c_mean = [2, 4, 6, 8, 10, 12] 
c_se = [1, 2, 2, 1, 2, 1.5] 
d_mean = [12, 10, 8, 6, 4, 2] 
d_se = [3, 2, 1, 2, 1, 1] 

fig = plt.figure() 
ax = fig.add_subplot(111) 
ax.set_xlabel('X', fontsize = 16) 
ax.set_ylabel('Y', fontsize = 16) 
plt.axis([0, 7, 0, 30]) 
x = np.linspace(0, 1) 
y = np.linspace(0, 30) 
ax.plot(xl, a_mean, linestyle = '-', color = 'k', linewidth = 3, marker = '', label = 'A') 
ax.errorbar(xl, a_mean, yerr = a_se, color = 'k', linewidth = 1) 
ax.plot(xl, b_mean, linestyle = '--', color = 'k', linewidth = 3, marker = '', label = 'B') 
ax.errorbar(xl, b_mean, yerr = b_se, color = 'k', linewidth = 1) 
ax.plot(xl, c_mean, linestyle = ':', color = 'k', linewidth = 3, marker = '', label = 'C') 
ax.errorbar(xl, c_mean, yerr = c_se, color = 'k', linewidth = 1) 
ax.plot(xl, d_mean, linestyle = '-.', color = 'k', linewidth = 3, marker = '', label = 'D') 
ax.errorbar(xl, d_mean, yerr = d_se, color = 'k', linewidth = 1) 
ax.legend(loc = 0, frameon = False, prop = {'size': 12}) 
plt.show() 

enter image description here

, je veux aussi faire les barres d'erreur d'avoir la même largeur de ligne pour les lignes, mais quand je le fais plus épais, les lignes se ressemblent tous.

Répondre

2

votre

errorbar() 

devrait avoir un

linestyle = '' 

autre cela va tracer la ligne pour vous.

+0

Merci pour votre réponse rapide! Il a corrigé le problème de la ligne fine et maintenant je peux aussi rendre les barres d'erreur plus épaisses. – owl

2

errorbar trace la barre d'erreur et les données.

Dans le soufflet de code,

ax.plot(xl, a_mean, linestyle = '--', color = 'k', linewidth = 3) 
ax.errorbar(xl, a_mean, yerr = a_se, color = 'k', linewidth = 1) 

les données de terrain deux fois. Une fois avec le style de ligne "-" (ax.plot), et une fois avec le style de ligne par défaut "-" (ax.errorbar). Lorsque vous augmentez la largeur de ligne de errorbar, vous ne voyez que le style linéaire par défaut.

Pour résoudre ce problème, utilisez un seul appel à errobar:

ax.errorbar(xl, a_mean, linestyle = '--', yerr = a_se, color = 'k', linewidth = 1) 
+0

Merci pour l'explication, bien que dans ce cas, pourriez-vous changer la largeur des données indépendamment de la largeur de la ligne d'erreur? – tglaria

+1

Je ne pense pas que vous pourriez. Si vous voulez une largeur de ligne différente, l'autre réponse est le chemin à parcourir. – Mel

+0

Merci, je ne savais pas que la barre d'erreur trace à nouveau la ligne. – tglaria