2017-08-23 18 views
0

私は、画像の上に極プロットをプロットしようとしています。ここで私が持っているコードがある、私は絵を下に見られているように、極座標プロットを透明にすることができません。画像の上に極座標をプロットしますか?

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


r = list(csv.reader(open('avg.csv','r'))) 
theta = np.linspace(0, 2 * np.pi, 73) 
img = plt.imread("voltage_abs.png") 
imgplot = plt.imshow(img) 
fig, ax = plt.subplots() 
ax.imshow(img, zorder=0) 
ax.imshow(img) 

ax = plt.subplot(111, projection='polar') 
ax.plot(theta, r) 
ax.set_ylim(30,41) 
ax.set_yticks(np.arange(30,41,2)) 
ax.set_yticklabels([]) 
ax.set_rlabel_position(-22.5) # get radial labels away from plotted line 
ax.grid(True) 
ax.set_title("Polar", va='bottom') 
plt.savefig('polar.pdf',bbox_inches='tight') 
plt.show() 

任意のアイデア?

+0

'[r]'タグを削除することをお勧めします。これは 'r'という名前の変数と関係があり、[Rプログラミング言語](http://r-project.org)とは関係ありません。 /)。 – r2evans

+0

'numpy'と' matplotlib'タグを追加して、助けることができる人々から注意を引くことをお勧めします。 –

答えて

0

部分的な解決策:

極座標プロットを表示する画像、およびその他を表示するために、互いの上に、手動いずれかを二つの軸を作成します。その秘訣は、極軸の背景パッチをax_polar.path.set_alpha(0)で透明にすることです。この問題のアプローチの問題は、極投影軸で使用したときにimshowがうまく動作しないため、alpha/zorderで遊ぶことができないため、希望どおりに動作します。

未解決の問題:背景画像と極座標プロットの両方を表示するには、画像を透明にする必要がありました(ax_image.imshow(img, alpha = .5))。私は、これを避けるためにさまざまなプロット要素のzorderで遊ぶ方法があると確信していますが、それを実現することはできませんでした。

また、画像は極座標プロットを超えています。これはおそらく画像の望ましくない部分をブロックするために、適切な形状のパッチとzorderを追加することで修正できますが、質問者がそれに関して何を望んでいるのか分かりません。

これは、軸目盛り/ラベル/タイトルの/ etcをいじる

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

r = list(csv.reader(open('avg.csv', 'r'))) 
theta = np.linspace(0, 2 * np.pi, 73) 
img = plt.imread("voltage_abs.png") 

fig = plt.gcf() 

axes_coords = [0.1, 0.1, 0.8, 0.8] 

ax_polar = fig.add_axes(axes_coords, projection = 'polar') 
ax_polar.patch.set_alpha(0) 
ax_polar.plot(theta, r) 
ax_polar.set_ylim(30, 41) 
ax_polar.set_yticks(np.arange(30, 41, 2)) 
ax_polar.set_yticklabels([]) 
ax_polar.set_rlabel_position(-22.5) # get radial labels away from plotted line 
ax_polar.grid(True) 
ax_polar.set_title("Polar", va = 'bottom') 

ax_image = fig.add_axes(axes_coords) 
ax_image.imshow(img, alpha = .5) 
ax_image.axis('off') # don't show the axes ticks/lines/etc. associated with the image 

plt.savefig('polar.pdf', bbox_inches = 'tight') 
plt.show() 

ようになるはずです。すべてが素晴らしく見えるようにするために必要になるでしょう。

ちなみに、長方形の軸でこれを行う方法を探している人がいる場合は、2軸のトリックを実行する必要はありません:プロットしようとしている軸にimshowだけを設定し、alpha/zorderが適切です。

+0

これは完璧です!いくつかの調整を加えれば、これは機能します!どうもありがとうございました。 –

関連する問題