我想绘制一个数据,它本质上是极坐标的(即,有θ和r)。但我还想为它绘制笛卡尔坐标轴,它应该是正确的(即,r cos(θ)必须是x,r sin(θ)必须是y)。
我已经尝试了一些方法,但不起作用x1c 0d1x
极坐标图的原点与笛卡尔坐标的原点不重合,半径也不匹配。
附加代码
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax4 = fig.add_subplot(1,1,1)
ax4_polar = fig.add_axes(ax4.get_position(), projection='polar', frameon=False)
ax4.set_facecolor('white')
ax4.set_xlim([-10,10])
ax4.set_ylim([-10,10])
ax4.set_xlabel("Distance along lateral axis (meters)")
ax4.set_ylabel("Distance along longitudinal axis (meters)")
ax4.set_title("X-Y scatter plot", color='black')
ax4_polar.set_thetamin(30)
ax4_polar.set_thetamax(150)
# ax4.grid(True)
ax4.xaxis.label.set_color('black')
ax4.yaxis.label.set_color('black')
ax4.tick_params(axis='x', colors='black')
ax4.tick_params(axis='y', colors='black')
theta = [0, np.pi/6, np.pi/3, np.pi/2, 3*np.pi/4]
r = [0, 2, 3 ,4 ,6]
a4, = ax4_polar.plot(theta, r, c='red', marker=".", ls="", alpha=1, label="X-Y scatter")
plt.show()
救命啊!
1条答案
按热度按时间55ooxyrt1#
我认为解决你的问题的理想方案将更多地取决于你在这个玩具例子之外试图完成的事情。
但请考虑以下几点:
在上图中,可以看到两个轴对齐。
但是请注意,如果您呼叫下列指令来设定theta限制,则会中断直角坐标轴和极坐标轴之间的对齐:
这是因为对
set_thetamin
和set_thetamax
的调用为极轴axp
引入了新的变换规则,这可以通过研究axp.trans
矩阵来看出,例如在调整到theta极限之前和之后的axp.transWedge.get_matrix()
。在绘制笛卡尔数据时,实际上可以使用这些更新的变换来保持对齐:
在上面的例子中,你可以再次看到对齐,但是现在笛卡尔坐标轴的标签不正确。你可以手动设置它们,同样理想的解决方案将取决于你想完成什么。
希望这能有所帮助,也许有更多使用matplotlib transformations经验的人可以进一步帮助!