在图像上绘制极坐标图?

时间:2017-08-23 03:28:09

标签: image numpy matplotlib plot

我试图在图像上绘制极坐标图。这是我的代码,我只是不能让极坐标图透明,以便在下面看到图片:

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()

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

部分解决方案:

手动创建两个轴,彼此重叠,一个用于显示图像,另一个用于显示极坐标图。诀窍是通过ax_polar.path.set_alpha(0)使极轴的背景色块透明。我认为问题中方法的问题是imshow在极轴投影轴上使用时效果不佳,因此使用alpha / zorder进行播放量不会很大按需工作。

未解决的问题:要查看背景图像和极坐标图,我需要使图像透明(ax_image.imshow(img, alpha = .5))。我打赌有一种方法可以使用zorder各种情节元素来避免这种情况,但我无法实现这一点。

此外,图像延伸到极坐标图之外。这可以通过添加具有正确形状的补丁和zorder来阻止图像的不期望部分来修复,但是我不确定问题者想要的是什么。

应该看起来像

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()

摆弄轴刻度/标签/标题/等。可能有必要让一切看起来都不错。

顺便提一下,如果有人在这里寻找如何为矩形轴做这个,你不需要做双轴技巧:只需imshow在同一轴上你就可以了绘制并适当设置alpha / zorder