2016-04-28 5 views
1

Wie kann ich diese weißen Ränder entfernen? Warum Achsen beginnen von -100, -100? Und schließlich, wie kann ich Größe für abschließendes png Bild einstellen?Weißen Rand entfernen und endgültige Bildgröße einstellen matplotlib

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

im = plt.imread('pitch.png') 
implot = plt.imshow(im, aspect='auto') 

dpi=96 

if dpi is None: 
     dpi = matplotlib.rcParams['savefig.dpi'] 
dpi = float(dpi) 

fig = plt.figure(figsize=(620/dpi, 579/dpi), dpi=dpi) 
ax = fig.add_axes([0, 0, 1, 1], frame_on=False) 
ax.imshow(im, interpolation='none') 

x, y = np.genfromtxt('coords.csv', delimiter=',', unpack=True) 
plt.plot(x,y, "o") 

plt.savefig('dybala.png', bbox_inches='tight') 

enter image description here

Antwort

0

Die weißen Grenzen werden durch die Verwendung imshow and plot in the same plot verursacht. Wenn Sie imshow alleine verwenden, werden die Grenzen der Achse auf die Grenze des Bildes gesetzt. Beim Plotten werden die Achsen jedoch automatisch aktualisiert.

Die einfachste Lösung besteht darin, die Achsenlimits nach imshow abzurufen und sie nach dem Plotten wieder auf die Abbildung anzuwenden. Zum Beispiel bekommen zuerst die Grenzen:

implot = plt.imshow(im, aspect='auto') 
xlim, ylim = plt.xlim(), plt.ylim() 

Dann setzte sie:

plt.plot(x,y, "o") 
plt.xlim(xlim) 
plt.ylim(ylim) 

, dass die Leerzeichen entfernen sollte.

die Größe der endgültigen Zahl gespeichert einzustellen, können Sie figsize=(w,h) (Größe in Zoll) bis savefig, zusammen mit dpi (für Punkte pro Zoll) passieren die endgültige Bildgröße zu bestimmen. Wenn Sie nach einer spezifischen Pixel Größe suchen, können Sie dies durch w dpi, h dpi berechnen.

plt.savefig('dybala.png', figsize=(8,6), dpi=200) 

Dies gibt ein (8 Zoll x 6 Zoll) * 200 = 1600 x 1200 Pixel Bild im PNG-Format. Beachten Sie jedoch, dass bei Verwendung von bbox_inches='tight' zum Entfernen von Leerzeichen um die Figur nach die Größenänderung erfolgt und ein kleineres Bild zurückgegeben wird.

Sie können dies etwas umgehen, indem Sie die Bildachsen mit plt.axis('off') entfernen. Wenn Sie die DPI so einstellen, dass sie der des Quellbilds entspricht und die fotsize entsprechend skaliert, sollten Sie in der Lage sein, mit bbox_inches='tight' zu speichern und ein Bild mit den ursprünglichen Abmessungen zurückzugeben.

Verwandte Themen