2012-05-22 14 views
6

ich suche die Positionen von zwei Arrays miteinander zu visualisieren. Meine Tabelle sieht wie folgt ausStreudiagramm mit xerr und yerr mit Matplotlib

Number   Description  value_1 value_2 err_1 err_2 
     1   descript_1  124.46 124.46 22.55 54.2 
     2   Descript_2  8.20  50.2  0.37 0.1 
     3   Descript_2  52.55 78.3  3.77 2.41 
     4   Descript_2  4.33  778.8 0.14 1.78 

, was ich will im Grunde so etwas wie dieses: scatterplot with two errorbars

Also in diesem Plot jeder Punkt hat im Wesentlichen drei Eigenschaften: 1. xError bar 2. yerror bar 3 Beschreibung, was dieser Punkt darstellt.

Ich habe das Gefühl, dass dies elegant mit Matplotlib gemacht werden kann, und während ich einige Sachen mit Fehlerbars versuchte, die mir nicht ganz das gaben, was ich erwarten würde. Und ich habe noch nicht herausgefunden, wie man die Beschriftungen in eine Handlung einfügt.

Antwort

8

Es klingt, als ob Sie so etwas wollen?

import matplotlib.pyplot as plt 

x = [124.46, 8.20, 52.55, 4.33] 
y = [124.46, 50.2, 78.3, 778.8] 
xerr = [54.2, 0.1, 2.41, 1.78] 
yerr = [22.55, 0.37, 3.77, 0.14] 

descrip = ['Atom 1', 'Atom 2', 'Atom 3', 'Atom 4'] 


plt.errorbar(x, y, xerr, yerr, capsize=0, ls='none', color='black', 
      elinewidth=2) 

for xpos, ypos, name in zip(x, y, descrip): 
    plt.annotate(name, (xpos, ypos), xytext=(8, 8), va='bottom', 
       textcoords='offset points') 

plt.show() 

enter image description here

errorbar funktioniert wie plot. Wenn Sie ein "Streudiagramm" möchten, müssen Sie linestyle='none' (oder äquivalent ls='none') angeben. Basierend auf Ihrer Zeichnung möchten Sie keine Obergrenzen für die Fehlerbalken, also habe ich angegeben. In ähnlicher Weise scheinen Sie ziemlich dicke Linien für die Fehlerbalken zu haben, also elinewidth=2.

Wenn Sie zusätzlich zu den Fehlerbalken eine Markierung benötigen, geben Sie einfach marker='o' (oder einen beliebigen Markierungsstil) an errorbar an.

annotate ist der einfachste Weg, um Punkte in einem Diagramm zu kommentieren. Hier habe ich angegeben, dass die Anmerkung 8 Punkte über und rechts von jeder Messung platziert werden soll.

0

Wird nicht

import matplotlib.pyplot as plt 

x = [100, 200, 300, 400] 
y = [100, 200, 300, 400] 
xerr = [100, 100, 100, 100] 
yerr = [20, 20, 20, 20] 

plt.errorbar(x, y, xerr, yerr, ls='none') 
plt.show() 

bedeuten die Fehlerbalken auf die falschen Achsen sind?

pyplot.errorbar:

matplotlib.pyplot.errorbar(x, y, yerr=None, xerr=None, fmt=u'', ecolor=None, elinewidth=None, capsize=3, barsabove=False, lolims=False, uplims=False, xlolims=False, xuplims=False, errorevery=1, capthick=None, hold=None, **kwargs) 

Beachten Sie, dass yErr XERR vorangeht, so

plt.errorbar(x, y, xerr, yerr, ls='none') 

macht Ihre Fehlerbalken nach hinten sein - yErr = XERR, XERR = yErr. Eine gute Zeit, um benannte Argumente zu verwenden:

plt.errorbar(x, y, xerr=xerr, yerr=yerr, ls='none') 
Verwandte Themen