我试图在图像上绘制极坐标图。这是我的代码,我只是不能让极坐标图透明,以便在下面看到图片:
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 :(得分: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
。