2017-05-26 3 views
0

Ich versuche ein Diagramm mit Matplotlib zu erstellen. Auf X-Achse habe ich Volumen, das in 895 Zeilen zu 333 ml geht. Auf der Y-Achse habe ich Extinktion, die in 895 Zeilen 446 ml beträgt. X- und Y-Daten haben die gleiche Länge. Nun möchte ich Bruchteile Namen (Fraktionen) (A1, A2, A3 usw.), die den Fraction Volumes ml entsprechen. Die Fraktionen Volumen geht auch zu 333 ml, aber Datenpunkte enden in 83 Zeilen. Auch ich möchte Temp und Druck mit der gleichen x-Achse ml hinzufügen, aber beachten Sie, dass sie unterschiedliche Datenlänge sind.Matplotlib: Streudiagramm mit mehreren Achsen mit unterschiedlichen Datenlängen und Text

Ich habe die Excel-Datei mit den Rohdaten und dem angehängten Bild, wie es aussehen soll, verbunden.

https://www.dropbox.com/s/g7r772mqlkpphla/se.xls?dl=0 und:

enter image description here

Antwort

0

Ihre Daten scheint nicht Leitfähigkeitsdaten zu haben. Um Brüche zu kennzeichnen, iteriere ich im Grunde genommen über Brüche und füge Etiketten einzeln hinzu. Hier ist, was ich habe:

import pandas as pd 
import matplotlib.pyplot as plt 

se_abs_data = pd.read_excel('se.xls', header=0, index_col=0, parse_cols=[0, 1]) 
se_tube_label = pd.read_excel('se.xls', header=0, index_col=0, parse_cols=[2, 3]).dropna() 

# Make a wider figure so that fraction labels are visible. 
fig_size = plt.figure().get_size_inches() 
fig_size[0] = fig_size[0] * 2 
plt.figure(figsize=fig_size) 

plt.plot(se_abs_data) 

# Find y position for fraction labels 
[_, _, ymin, ymax] = plt.axis() 
y_tube_label = ymin + (ymax - ymin) * 0.03 
# Add fraction labels one by one 
for fraction, label in se_tube_label.iterrows(): 
    plt.text(fraction, y_tube_label, label[0], rotation='vertical', verticalalignment='bottom') 
    plt.axvline(fraction, ymax=0.1, color='r') 

plt.xlabel('Elution volume (ml)') 
plt.ylabel('Absorbance (mAu)') 
plt.minorticks_on() 
plt.legend(['UV1 280nm'], frameon=False) 
# plt.savefig('test.png') 
plt.show() 

Hier ist die Figur: test.png

Edit:

Hier ist für 2 y-Achse:

import pandas as pd 
import matplotlib.pyplot as plt 

se_abs_data = pd.read_excel('se.xls', header=0, index_col=0, parse_cols=[0, 1]) 
se_temp_data = pd.read_excel('se.xls', header=0, index_col=0, parse_cols=[4, 5]) 
se_tube_label = pd.read_excel('se.xls', header=0, index_col=0, parse_cols=[2, 3]).dropna() 

# Make a wider figure so that fraction labels are visible. 
fig, ax_abs = plt.subplots() 
fig_size = fig.get_size_inches() 
fig_size[0] = fig_size[0] * 2 
fig.set_size_inches(fig_size) 

line_abs, = ax_abs.plot(se_abs_data, color='b') 
ax_abs.axis([0, 350, -500, 2500]) 
ax_temp = ax_abs.twinx() 
line_temp, = ax_temp.plot(se_temp_data, color='r') 
ax_temp.axis([0, 350, 17.8, 19.6]) 

# Find y position for fraction labels 
[_, _, ymin, ymax] = ax_abs.axis() 
y_tube_label = ymin + (ymax - ymin) * 0.03 
# Add fraction labels one by one 
for fraction, label in se_tube_label.iterrows(): 
    ax_abs.text(fraction, y_tube_label, label[0], rotation='vertical', verticalalignment='bottom') 
    ax_abs.axvline(fraction, ymax=0.1, color='r') 

plt.minorticks_on() 
plt.xlabel('Elution volume (ml)') 
ax_abs.set_ylabel('Absorbance (mAu)') 
ax_temp.set_ylabel('Temperature (°C)') 
plt.legend((line_abs, line_temp), ('UV1 280nm', 'Temp °C'), frameon=False) 
fig.tight_layout() 
# plt.savefig('test.png') 
plt.show() 

Hier ist die Figur : test.png

Wie erwähnt in matplotlib's How-To: "mehr als zwei Skalen werden derzeit nicht unterstützt, obwohl es auf der Wunschliste ist".

+0

Wenn ich den Code mit der Datei ausführen ich: Python se.py Traceback (jüngste Aufforderung zuletzt): File "se.py", Zeile 40, in plt.plot (se) NameError: Name 'se' ist nicht definiert – Ziprip

+0

@Ziprip Sorry, mein Fehler. Aktualisieren Sie es auf 'se_abs_data' und entfernen Sie einen nicht verwendeten Import. Könnten Sie es bitte noch einmal versuchen? –

+0

Begann zu arbeiten, ich habe jetzt die Grafik, aber das Problem ist, dass die Brüche mit der tatsächlichen Grafik überlappen. Hier ist die Ausgabe: https://www.dropbox.com/s/f2yffbhzyb7id8d/Screenshot%202017-05-26%2013.42.07.png?dl=0 auch, ich möchte Temp und Druck zu der gleichen Grafik hinzufügen und Ich habe die XLS-Datei mit Temp- und Pressure-Werten aktualisiert. Hinweis: Die Datenpunkte für Temp und Pressure sind wieder unterschiedlich. Wie kann ich das plotten? – Ziprip

Verwandte Themen