Seite 1 von 1

Plot mit drei Achsen und zwei unterscheidlichen Plottypen

Verfasst: Samstag 12. August 2017, 13:09
von uschmidt
Hallo zusammen,
in einem Plot würde ich gerne zwei verschiedene Variablen über eine Zeitreihe darstellen. Dabei soll eine Variable als Balken und die andere als Linie dargestellt werden. Bisher habe ichs aber leider nur hinbekommen, beide als Linie darzustellen.

Bisher sieht mein Diagramm so aus:

http://imgur.com/a/veIeC

Mein Code sieht wie folgt aus:

Code: Alles auswählen

import pandas as pd
import matplotlib.pyplot as plt

dt=pd.read_csv('dt.csv')

x=dt.x
y1=dt.y1
y2=dt.y1

def two_scales(ax1, time, data1, data2, c1, c2):
    ax2 = ax1.twinx()

    ax1.plot(time, data1, color=c1) #Wenn ich dieser Stelle 'ax1.bar' eingebe, wird mir ein leerer Plot ausgegeben
    ax1.set_ylabel('y1')

    ax2.plot(time, data2, color=c2)
    ax2.set_ylabel('y2')
    return ax1, ax2

fig, ax = plt.subplots()
ax1, ax2 = two_scales(ax, x, y, z, 'r', 'b')

for tick in ax.get_xticklabels():
    tick.set_rotation(90)

plt.show()
Danke schon mal

Re: Plot mit drei Achsen und zwei unterscheidlichen Plottypen

Verfasst: Samstag 12. August 2017, 18:51
von Melewo
uschmidt hat geschrieben:Dabei soll eine Variable als Balken und die andere als Linie dargestellt werden.
Balken und Linien sind hier zu sehen, nur dürfte das wohl weniger Deinen Vorstellungen entsprechen:

viewtopic.php?t=29338

Re: Plot mit drei Achsen und zwei unterscheidlichen Plottypen

Verfasst: Samstag 12. August 2017, 23:03
von uschmidt
Nee, ich dachte vom Stil an sowas

https://goo.gl/images/a5AGkc

Re: Plot mit drei Achsen und zwei unterscheidlichen Plottypen

Verfasst: Sonntag 13. August 2017, 07:44
von Melewo
Diese Variante habe ich bisher noch nicht gesehen, zumindest nicht mit Matplotlib. Bei Histogrammen hast Du zwar Varianten mit Balken und Linien aber halt nur eine Linie passend zu den Balken. Was Deinen Vorstellungen entspricht, da sah ich nur Beispiele mit Visual PowerPoint.

Re: Plot mit drei Achsen und zwei unterscheidlichen Plottypen

Verfasst: Sonntag 13. August 2017, 12:06
von Melewo
Ist es in etwa das, was Dir von der Darstellung vorschwebt?

Frage mich nicht, was das bedeuten soll oder wie ich das gemacht habe, ich habe keine Ahnung, habe nur so lange etwas aus unterschiedlichen Beispielen kopiert und probiert, bis es von der Darstellung mit der Linie und Balken in etwa passen müsste.

Ist sicherlich noch sehr ungenau und der Code dürfte zu wünschen übrig lassen, doch den kannst Du Dir selbst nachbessern.

Bild

Code: Alles auswählen

import matplotlib.pyplot as plt

a_werte = [0.5, 3, 4, 12, 10, 12, 9, 10, 11]
y_werte = [0.5, 3, 10, 7, 5, 3, 4, 5, 6, 8]
n_wert  = len(y_werte)
x_werte = range(n_wert)

figur, axe_balken = plt.subplots()

axe_balken.plot(a_werte)
axe_balken.set_xlabel("x-Label", color="#CE6600")
axe_balken.set_ylabel("y-Label", color="#0000C0")
axe_balken.bar(x_werte, y_werte, 0.6, color="#CE6600")

axe_linie = axe_balken.twinx()
axe_linie.tick_params("y_werte", colors="#009000")

figur.tight_layout()
plt.show()

Re: Plot mit drei Achsen und zwei unterscheidlichen Plottypen

Verfasst: Sonntag 13. August 2017, 18:09
von uschmidt
Danke, so in etwa hatte ich mir das vorgestellt. In deinem Beispiel ist die zweite y-Achse allerdings überflüssig, da beide Variablen die gleiche Skala benutzen. Das ist bei meinen Daten leider nicht möglich

Re: Plot mit drei Achsen und zwei unterscheidlichen Plottypen

Verfasst: Sonntag 13. August 2017, 20:02
von Melewo
Na ja, bisher gefallen mir ja auch nur einige bunte Grafiken von Matplotlib, tiefgehender habe ich mich damit noch nicht beschäftigt. Liegt jetzt auf 2 y-Achsen verteilt, nur jetzt verschwindet die andere Linie nicht mehr. Bin mir aber sicher, dass Du dieses kleine restliche Problemchen noch lösen wirst, wenn Du Dich etwas mit der Dokumentation beschäftigst.

Bild

Code: Alles auswählen

import matplotlib.pyplot as plt

y1_werte = [0.5, 3, 6, 7, 5, 3, 4, 5, 6, 8]
n1_wert  = len(y1_werte)
x1_werte = range(n1_wert)

y2_werte = [0.5, 12, 15, 14, 10, 12, 9, 10, 14]
# Eine gemeinsame sollte für x genügen?
# n2_wert  = len(y2_werte)
# x2_werte = range(n2_wert)

figur, achse_balken = plt.subplots()

achse_balken.plot(y1_werte)
achse_balken.set_xlabel("x-Label", color="#ce6600")
achse_balken.set_ylabel("y-Label 1", color="#ce6600")
achse_balken.bar(x1_werte, y1_werte, 0.6, color="#ce6600")

achse_linie = achse_balken.twinx()
achse_linie.plot(y2_werte)
achse_linie.set_ylabel("y-Label 2", color="#0000C0")
achse_linie.tick_params(y2_werte)

figur.tight_layout()
plt.show()

Re: Plot mit drei Achsen und zwei unterscheidlichen Plottypen

Verfasst: Sonntag 13. August 2017, 20:56
von Sirius3
@Melewo: was bewirkt denn Ziele 14 bei Dir?

Re: Plot mit drei Achsen und zwei unterscheidlichen Plottypen

Verfasst: Sonntag 13. August 2017, 21:20
von Melewo
Ja, das war es, Zeile 14 war zu viel, nun ist alles klar.