2017-09-18 13 views
2

私は真の次元(拡大または拡大されていない)で画像をレンダリングしようとしていますが、matplotlibでこれを行う最も簡単な方法はfigimageです。matplotlib:Jupiterのノートブックにfigimageが表示されない

しかし、Jupyterノートブックで使用しようとすると、数字が表示されません。他のプロットは罰金を示し、これが唯一のfigimageに影響を与えているようだ:

figimage not showing

あなたが見ることができるように、この最初のプロットは罰金示しているが、もう一つはしません。私は間違って何をしていますか?

IPythonシェルで次のコードを実行すると、図が予想どおりに表示されるため、私のJupyterセットアップに問題がある可能性があります。

import matplotlib 
from matplotlib import pyplot as plt 
import numpy as np 

x = np.linspace(0, 2*np.pi, 500) 
plt.plot(x, np.sin(x)) 
plt.show() 

data = np.random.random((500,500)) 
plt.figimage(data) 
plt.show() 

答えて

1

figimageは、現在の図形に背景を追加するだけです。すでに存在するFigureを持っていなければ、コマンドは何も描画しません。次のスニペットは、内側と外側の両方IPythonノートブックの外に動作します:

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

plt.figure() 

x = np.linspace(0, 2 * np.pi, 500) 
plt.plot(x, np.sin(x)) 

data = np.random.randn(500, 500) 
plt.figimage(data) 

plt.show() 

しかし、それはあなたが/期待やりたいしません。その真の次元で画像をレンダリングするためには、他の人が以前に[1][2][3][4]しようとしたとして、figsizedpiでプレイしているでしょう:

data = np.random.randn(500, 500) 
dpi = 80 
shape = data.shape 

fig, ax = plt.subplots(figsize=(shape[1]/float(dpi), shape[0]/float(dpi)), dpi=dpi, frameon=False) 
ax.imshow(data, extent=(0,1,1,0)) 
ax.set_xticks([]) # remove xticks 
ax.set_yticks([]) # remove yticks 
ax.axis('off')  # hide axis 
fig.subplots_adjust(bottom=0, top=1, left=0, right=1, wspace=0, hspace=0) # streches the image and removes margins 
fig.savefig('/tmp/random.png', dpi=dpi, pad_inches=0, transparent=True) # Optional: save figure 
fig.show() 
+0

ああ、私は参照してください。 'figimage'は主に背景をレンダリングするためのものですか?あなたの提案は魅力的です(私はサブプロットの必要性を完全に理解していませんが)、ありがとう! – nfelger

+1

@nfelgerまさに、「figimage」はバックグラウンドのためのものです。サブプロットは完全には必要ではありませんが、これらのコマンドを 'plt.xticks([])'(他のコマンドでも同様)に置き換えることができますが、私は 'fig'と' axes'でコーディングするのが好きです特に複数のサブプロットがある場合は、コードがより明確になります。最初のコマンドを 'plt.figure(.......)'に置き換えると、まったく同じことになります。 –

関連する問題