将Matplotlib贴片与极坐标图混合?

时间:2011-01-04 03:57:58

标签: python matplotlib

我正在尝试在极坐标中绘制一些数据,但我不想要使用Matplotlib polar()函数获得的标准刻度,标签,轴等。我想要的只是原始情节,没有别的,因为我正在用手动绘制的补丁和线来处理所有事情。

以下是我考虑的选项:

1)使用polar()绘制数据,隐藏多余的内容(使用ax.axes.get_xaxis().set_visible(False)等),然后绘制自己的轴(使用Line2DCircle,等等。)。问题是,当我调用polar()并随后添加Circle补丁时,它会以极坐标绘制,最终看起来像无穷大符号。此外,缩放似乎不适用于polar()功能。

2)跳过polar()函数并以某种方式使用Line2D手动制作我自己的极坐标图。问题是我不知道如何在极坐标中进行Line2D绘制,并且还没有弄清楚如何使用变换来做到这一点。

知道我该怎么办?

3 个答案:

答案 0 :(得分:1)

考虑到你想做什么,你的选项#2可能是最简单的。因此,您将保持直角坐标,从极坐标到直角坐标修改您的函数,并使用plot()绘图(这比使用'Line2D'更容易)。

将极性函数转换为矩形函数可以通过以下方式完成:

def polar_to_rect(theta, r):
    return (r*cos(theta), r*sin(theta))

可以通过以下方式完成绘图:

def my_polar(theta, r, *args, **kwargs):
    """
    theta, r -- NumPy arrays with polar coordinates.
    """
    rect_coords = polar_to_rect(theta, r)
    pyplot.plot(rect_coords[0], rect_coords[1], *args, **kwargs)
    # You can customize the plot with additional arguments, or use `Line2D` on the points in rect_coords.

答案 1 :(得分:0)

要删除刻度线和标签,请尝试使用

`matplotlib.pyplot.tick_params(axis='both', which='both', length=0, width=0, labelbottom = False, labeltop = False, labelleft = False, labelright = False)`

来自http://matplotlib.sourceforge.net/api/pyplot_api.html#matplotlib.pyplot.polar

答案 2 :(得分:0)

关于使用matplotlib变换的注释...我使用以下方法将极坐标图转换为我可以在笛卡尔/矩形轴上绘制的多边形。

import matplotlib.pyplot as plt

polarPlot = plt.subplot(111, polar = True)
# Create some dummy polar plot data
polarData = np.ones((360,2))
polarData[:,0] = np.arange(0, np.pi, np.pi/360) * polarData[:,0]
# Use the polar plot axes transformation into cartesian coordinates
cartesianData = polarPlot.transProjection.transform(polarData)