2013-08-25 8 views
5

Sto tentando di creare un grafico a dispersione con i fotogrammi erratici in matplotlib. Il seguente è un esempio di ciò che il mio codice è simile:Tappi per passepartout Matplotlib Manca

import matplotlib.pyplot as plt 
import numpy as np 
import random 

x = np.linspace(1,2,10) 
y = np.linspace(2,3,10) 
err = [random.uniform(0,1) for i in range(10)] 

plt.errorbar(x, y, 
     yerr=err, 
     marker='o', 
     color='k', 
     ecolor='k', 
     markerfacecolor='g', 
     label="series 2", 
     capsize=5, 
     linestyle='None') 
plt.show() 

Il problema è la trama che è uscita non contiene tappi a tutti! enter image description here

Per quello che vale, sono su Ubuntu 13.04, Python 2.7.5 | Anaconda 1.6.1 (64-bit) |, e Matplotlib 1.2.1.

Potrebbe essere un rcparam nascosto che deve essere sovrascritto?

+1

hai cambiato nulla per rendere il vostro sfondo grigio? Mi chiedo se stai riscontrando problemi di zorder (correlati a http://stackoverflow.com/questions/14003572/how-to-force-errorbars-to-render-last-with-matplotlib/14007175#14007175). La patch per quel problema è in 1.3, ma non 1.2.1 – tacaswell

+2

Il tuo codice funziona correttamente sul mio sistema, sospetto che nel rendere i grafici orribili (sì, lo so che è soggettivo) hai rotto qualcosa. Abbiamo bisogno di vedere i tuoi rcparams per eseguire il debug di questo. – tacaswell

+0

Sì, in realtà sto usando un file matplotlibrc che è significativamente modificato rispetto a quello che è per impostazione predefinita. Quale sezione del file hai bisogno di guardare? – astromax

risposta

9

Quello che ha funzionato per me è stata l'aggiunta di questa (come da: How to set the line width of error bar caps, in matplotlib):

(_, caps, _) = plt.errorbar(x,y, yerr=err, capsize=20, elinewidth=3) 

for cap in caps: 
    cap.set_color('red') 
    cap.set_markeredgewidth(10) 
+2

qualche idea _ per quale motivo? – tacaswell

+0

Non particolarmente. Ho cercato di capirlo, ma la sintassi sembra confondermi. So (_, caps, _) sta producendo una tupla di tuple, tuttavia, set_color() e set_markeredgewidth() non mi è familiare. – astromax

+0

Fanno esattamente come suonano, impostano il colore e la larghezza del bordo dei marker. http://matplotlib.org/api/artist_api.html#matplotlib.lines.Line2D.set_color http://matplotlib.org/api/artist_api.html#matplotlib.lines.Line2D.set_markeredgewidth – tacaswell