2016-04-26 3 views
4

Ich stieß auf ein Problem beim Versuch, eine 920px Breite PNG von numpy Daten zu speichern. Eine Spalte fehlt. Es scheint nur diese Breite verursacht das Problem (ich habe einige andere versucht und das Problem ist nicht aufgetreten). MWE:Kann nicht speichern eine Zahl von 920px Breite in Matplotlib

import matplotlib.pyplot as plt 
import numpy as np 
a1 = np.zeros((919, 100)) 
a2 = np.zeros((920, 100)) 
a3 = np.zeros((921, 100)) 
plt.imsave('test1.png', a1) 
plt.imsave('test2.png', a2) 
plt.imsave('test3.png', a3) 

Die resultierenden Bilder haben alle eine Höhe von 100, aber die Breiten sind:

  • test1: 919
  • test2:
  • test3: 921

Was passiert hier?


Versionen:

  • matplotlib: 1.4.3
  • numpy: 1.9.2
+1

nur um das hinzuzufügen: Dies ist reproduzierbar in mpl 1.5.1 und numpy 1.10.4, und tritt auch für 'jpg' sowie' png' – tom

Antwort

2

Es ist ein matplotlib Fehler: https://github.com/matplotlib/matplotlib/issues/4280. Anscheinend wurde es im Februar 2016 repariert (vielleicht in https://github.com/matplotlib/matplotlib/pull/5718), aber ich glaube nicht, dass es eine Veröffentlichung gab, seit der Fehler im Master-Zweig behoben wurde.

Ein Work-around ist das Argument dpi=1 in der imsave Funktion zu nutzen, z.B .:

plt.imsave("foo.png", a, dpi=1) 

aber ein DPI von 1 könnte einige Software verwirren, die die PNG-Datei liest.

+0

'dpi = 1' funktioniert für mich! – hdtx

Verwandte Themen