2017-09-25 4 views
0

Ich bin wirklich hier verwirrt; der gleiche Code in Python und in IPython Notebook produziert zwei verschiedene PNG-Dateien mit savefig:matplotlib Plot Punkte aussehen verschwommen in Python, scharf in IPython

import matplotlib.pyplot as plt 
import numpy as np 

fig = plt.figure(figsize=(5,4)) 
ax = fig.add_subplot(1,1,1) 
abc = np.random.uniform(size=(50000,3)) 
print abc.shape 
x = (2*abc[:,0]-abc[:,1]-abc[:,2])/3.0 
y = (abc[:,1]-abc[:,2])/np.sqrt(3) 
ax.plot(x,y,'.',markersize=0.25) 
ax.set_aspect('equal') 
ax.set_xlabel('x') 
ax.set_ylabel('y') 
with open('/tmp/screenshots/foo.png','wb') as f: 
    fig.savefig(f, format='png') 

IPython Notebook:

enter image description here

Python:

enter image description here

Es ist das gleiche PC mit der gleichen Version von Python in beiden Fällen. Gibt es eine Möglichkeit, die Bildformatierung in IPython mit beiden Methoden zu erhalten? Die Python-Version erzeugt unscharfe Punkte und sieht schlecht aus.

Antwort

1

Argh - ich es herausgefunden, die dpi Parameter irgendwie anders in den beiden Fällen gewählt wird, und wenn ich es dpi=72 zwingen, dann sieht es schön:

import matplotlib.pyplot as plt 
import numpy as np 

fig = plt.figure(figsize=(5,4)) 
ax = fig.add_subplot(1,1,1) 
abc = np.random.uniform(size=(50000,3)) 
print abc.shape 
x = (2*abc[:,0]-abc[:,1]-abc[:,2])/3.0 
y = (abc[:,1]-abc[:,2])/np.sqrt(3) 
ax.plot(x,y,'.',markersize=0.25) 
ax.set_aspect('equal') 
ax.set_xlabel('x') 
ax.set_ylabel('y') 
with open('/tmp/screenshots/foo.png','wb') as f: 
    fig.savefig(f, format='png', dpi=72)