2016-04-28 81 views
1

我該如何刪除這些白色邊框?爲什麼軸從-100開始,-100?最後,我如何設置最終的PNG圖像的大小?刪除白色邊框並設置最終圖像尺寸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

回答

0

白色邊框採用imshow and plot in the same plot引起的。單獨使用imshow時,軸的極限值將設置爲圖像的極限。但是,繪製座標軸時會自動更新。

最簡單的解決方法是獲得imshow之後的軸限制,並在繪圖之後將它們重新應用於圖形。例如,首先得到的限制:

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

然後將它們設置:

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

這應該刪除空格。

要設置保存最後的數字的大小,你可以通過figsize=(w,h)(英寸大小)savefig,與dpi(每英寸點數),以確定最終圖像尺寸。如果你正在尋找一個特定的像素大小,你可以通過w dpi,h dpi來計算。

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

這給出了(8in x 6in)* 200 = 1600 x 1200像素PNG格式的圖像。但是,請注意,如果使用bbox_inches='tight'刪除圖中的空白,則會在調整大小後發生,並返回更小的圖像。

你可以通過刪除圖形軸plt.axis('off')來解決這個問題。如果您將DPI設置爲與源圖像的DPI匹配並相應地縮放figsize,則應該可以使用bbox_inches='tight'進行保存並返回與原始尺寸匹配的圖像。