Plots in Pdf abspeichern

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
mgm841
User
Beiträge: 19
Registriert: Montag 7. Mai 2018, 12:15

Hallo zusammen, ich hätte da eine Frage. Und zwar möchte ein multiplen Plot mit For Loop Schleife, in einem PDf Datei abspeichern. Leider speichert er mir jedes mal nur den letzten Plot. Anscheinend läuft die Schleife durch und speichert den letzten Plot ab, ich habe verschiedene Sachen versucht, leider klappt es nicht. Mein Code sieht wie Folgt aus:
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from matplotlib.backends.backend_pdf import PdfPages
import matplotlib.backends.backend_pdf


DATA_FILE = "C:/test/corr.xlsx"

c = pd.read_excel("C:/test/corr.xlsx")

c.select_dtypes(include = ['int16', 'int32', 'int64', 'float16', 'float32', 'float64'])

corr = c.corr()

indices = np.where(corr > 0.5)
indices = [(corr.columns[x], corr.columns[y]) for x, y in zip(*indices)
if x != y and x < y]

d = len(c)
x = np.arange(0,d,1)


for pair in indices:

y1 = c[pair[0]]
y2 = c[pair[1]]

fig = plt.figure(figsize=(10,4))
ax1 = fig.add_subplot(111)
ax1.plot(x, y1, "-o", color='b')
#ax1.set_ylabel(y1)
plt.ylabel(pair[0])

ax2 = ax1.twinx()
ax2.plot(x, y2,"-o" ,color='r')
#ax2.set_ylabel(y2, color='r')
for tl in ax2.get_yticklabels():
tl.set_color('r')

plt.title('Reihe')
plt.ylabel(pair[1])

plt.savefig("test.pdf", dpi =300)

würde mich freuen, wenn ihr mir helfen könntet.
Sirius3
User
Beiträge: 18266
Registriert: Sonntag 21. Oktober 2012, 17:20

Nein, er speichert jeden Plot, aber immer unter dem selben Namen.

Aber für Deinen Fall gibt es auch ein Beispiel: Multipage PDF.
Benutzeravatar
ThomasL
User
Beiträge: 1378
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

@Sirius aber nur, wenn das plt.savefig("test.pdf", dpi =300) innerhalb der Schleife liegt

@mgm841
könntest du deinen Code im Editor zwischen
[ Python ]
hier Code
[ /Python ] setzen,
so ist die Struktur nicht erkennbar.
Im Editor gibt es rechts neben der Schriftgrößenauswahl einen Button dafür. Danke
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
mgm841
User
Beiträge: 19
Registriert: Montag 7. Mai 2018, 12:15

Code: Alles auswählen

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from matplotlib.backends.backend_pdf import PdfPages
import matplotlib.backends.backend_pdf


DATA_FILE = "C:/test/corr.xlsx"

c = pd.read_excel("C:/test/corr.xlsx")

c.select_dtypes(include = ['int16', 'int32', 'int64', 'float16', 'float32', 'float64'])

corr = c.corr() 

indices = np.where(corr > 0.5)
indices = [(corr.columns[x], corr.columns[y]) for x, y in zip(*indices)
                                        if x != y and x < y]

d = len(c)
x = np.arange(0,d,1)




for pair in indices:
    
    y1 = c[pair[0]]
    y2 = c[pair[1]]
    
    fig = plt.figure(figsize=(10,4))
    ax1 = fig.add_subplot(111)
    ax1.plot(x, y1, "-o", color='b')
    plt.ylabel(pair[0])
    
    ax2 = ax1.twinx()
    ax2.plot(x, y2,"-o" ,color='r')
    for tl in ax2.get_yticklabels():
        tl.set_color('r')
        
    plt.title('Reihe')
    plt.ylabel(pair[1])
    
plt.savefig("test.pdf")
mgm841
User
Beiträge: 19
Registriert: Montag 7. Mai 2018, 12:15

In meinem Fall werden 7 Plots zwar generiert, aber nur einer in Pdf abgespeichert. Ich möchte alle in einem Pdf Datei haben. Der nächste Step wäre, je 4 Plots auf einer Pdf Seite abzuspeichern.
Sirius3
User
Beiträge: 18266
Registriert: Sonntag 21. Oktober 2012, 17:20

ThomasL hat geschrieben: Montag 4. Juni 2018, 14:28 @Sirius aber nur, wenn das plt.savefig("test.pdf", dpi =300) innerhalb der Schleife liegt
das war im ersten Post auch der Fall (sieht man, wenn man sich den HTML-Quelltext anschaut).
Benutzeravatar
ThomasL
User
Beiträge: 1378
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

vielleicht hilft ja dieses Beispiel
https://matplotlib.org/examples/pylab_e ... e_pdf.html
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Sirius3
User
Beiträge: 18266
Registriert: Sonntag 21. Oktober 2012, 17:20

@ThomasL: was ist der Sinn, einen Link, den ich schon gepostet habe, nochmals zu posten?
Benutzeravatar
ThomasL
User
Beiträge: 1378
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

eventuell doppelt hilft doppelt oder so......
Nee, habe deinen Link nicht gesehen und selber gegoogelt.
Etwas was der Threadstarter hätte auch machen können.....
aber vielleicht möchte er Hilfe auf deutsch?
ist doch auch egal, oder?
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Sirius3
User
Beiträge: 18266
Registriert: Sonntag 21. Oktober 2012, 17:20

@ThomasL: wenn man die richtigen Stichworte nicht kennt, ist Google manchmal dumm. Und wenn man Anfänger ist, weiß man auch nicht, dass es in den Beispielen der matplotlib-Doku quasi für jedes Problem schon ein Beispiel gibt.
mgm841
User
Beiträge: 19
Registriert: Montag 7. Mai 2018, 12:15

Ich kenne die Seite und Englisch stellt auch kein Problem dar, mein Problem ist, dass ich nicht weiß wie ich aus einem Loop heraus die einzelnen Plots speichern kann. Ohne die Save.fig Funktion werden mir alle Plots ohne Fehler angezeigt. Mir fehlt ein Zwischenschritt, nur weiß ich leider nicht, wie ich aus einem Loop einzelne Pdf Pages generiere.
Sirius3
User
Beiträge: 18266
Registriert: Sonntag 21. Oktober 2012, 17:20

Im Beispiel werden 3 Plots erzeugt und ins PDF gespeichert, jetzt mußt Du nur noch dieses Plot-Generieren und -Speichern in Deine Schleife einbauen.
Benutzeravatar
__blackjack__
User
Beiträge: 14032
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@mgm841: Statt der drei Plots die in dem Beispiel linear im Code als Seiten erstellt werden, musst Du das halt in einer Schleife machen. Dem `PdfPages`-Exemplar ist das völlig egal ob dessen `savefig()`-Methode in einer Schleife aufgerufen wird, oder mehrmals hintereinander in linear runter geschriebenen Code. Den Unterschied könnte man ja auch gar nicht heraus finden.
„A life is like a garden. Perfect moments can be had, but not preserved, except in memory. LLAP” — Leonard Nimoy's last tweet.
mgm841
User
Beiträge: 19
Registriert: Montag 7. Mai 2018, 12:15

@__blackjack__ :Wie muss ich mir das genau vorstellen, es werden durch mein Code beliebig viele Plots dargestellt, die Bedingung lautet, wenn Korrelationskoeffizient größer als 0.5 ist, soll er mir die beiden Variablen übergeben, damit ich es graphisch darstellen kann. Und mit dem momentanen Excel Datei sind es 7 Plots die dargestellt werden.
Sirius3
User
Beiträge: 18266
Registriert: Sonntag 21. Oktober 2012, 17:20

Es werden so viele Plots erstellt, wie Du savefig-Aufrufe hast. Wieviele das genau sind, das legst Du durch Dein Programm fest.
Antworten