在Matplotlib/Python中更改极坐标图的轴选项

5 投票
1 回答
26650 浏览
提问于 2025-04-17 12:43

我在使用Matplotlib时遇到了一个问题,就是想要更改我的坐标轴标签,特别是在极坐标图中调整径向轴的选项。

简单来说,我正在计算一个圆柱体的变形情况,也就是半径与原始(完美圆形)圆柱体的偏差。有些变形值是负数,有些是正数,这主要是因为拉伸和压缩的力量。我想用图形的方式在圆柱坐标中表示这些数据,所以我觉得极坐标图是最合适的选择。在Excel中,有一个“雷达图”的选项,可以让我灵活地指定径向轴的最小值和最大值。我想在Python中用Matplotlib实现同样的功能。

这是我用来绘制极坐标图的Python脚本:

#!usr/bin/env python
import matplotlib.pyplot as plt
import numpy as np

x = np.arange(-180.0,190.0,10)
theta = (np.pi/180.0 )*x    # in radians

offset = 2.0

R1 = [-0.358,-0.483,-0.479,-0.346,-0.121,0.137,0.358,0.483,0.479,0.346,0.121,\
-0.137,-0.358,-0.483,-0.479,-0.346,-0.121,0.137,0.358,0.483,0.479,0.346,0.121,\
-0.137,-0.358,-0.483,-0.479,-0.346,-0.121,0.137,0.358,0.483,0.479,0.346,0.121,\
-0.137,-0.358]

fig1 = plt.figure()
ax1 = fig1.add_axes([0.1,0.1,0.8,0.8],polar=True)
ax1.set_rmax(1)
ax1.plot(theta,R1,lw=2.5)

我的图看起来是这样的: bad

但这并不是我想要的展示方式。我希望能调整我的径向轴,以便显示数据相对于某个参考值的偏差,比如-2。我该如何在极坐标中让Matplotlib更改最小的坐标轴标签呢?在Excel中我可以非常简单地做到这一点。我选择了-2作为最小径向值,得到了下面这个Excel雷达图:
excelplot

在Python中,我可以很容易地将输入数据偏移2的量。我的新数据集叫做R2,如下所示:

#!usr/bin/env python
import matplotlib.pyplot as plt
import numpy as np

x = np.arange(-180.0,190.0,10)
theta = (np.pi/180.0 )*x    # in radians

offset = 2.0

R2 = [1.642,1.517,1.521,1.654,1.879,2.137,2.358,2.483,2.479,2.346,2.121,1.863,\
1.642,1.517,1.521,1.654,1.879,2.137,2.358,2.483,2.479,2.346,2.121,1.863,1.642,\
1.517,1.521,1.654,1.879,2.137,2.358,2.483,2.479,2.346,2.121,1.863,1.642]

fig2 = plt.figure()
ax2 = fig2.add_axes([0.1,0.1,0.8,0.8],polar=True)
ax2.plot(theta,R2,lw=2.5) 
ax2.set_rmax(1.5*offset)
plt.show()

下面是这个图: good

一旦我得到了这个结果,我可以手动添加坐标轴标签,并把它写死在我的脚本里。但这样做真的很麻烦。有没有什么方法可以直接在Matplotlib中得到一个和Excel雷达图相似的效果,并且在不改变输入数据的情况下更改坐标轴标签呢?

1 个回答

9

你可以直接用普通的方法来设置坐标轴的范围:

#!usr/bin/env python
import matplotlib.pyplot as plt
import numpy as np

x = np.arange(-180.0,190.0,10)
theta = (np.pi/180.0 )*x    # in radians

offset = 2.0

R1 = [-0.358,-0.483,-0.479,-0.346,-0.121,0.137,0.358,0.483,0.479,0.346,0.121,\
-0.137,-0.358,-0.483,-0.479,-0.346,-0.121,0.137,0.358,0.483,0.479,0.346,0.121,\
-0.137,-0.358,-0.483,-0.479,-0.346,-0.121,0.137,0.358,0.483,0.479,0.346,0.121,\
-0.137,-0.358]

fig1 = plt.figure()
ax1 = fig1.add_axes([0.1,0.1,0.8,0.8],polar=True)
ax1.set_ylim(-2,2)
ax1.set_yticks(np.arange(-2,2,0.5))
ax1.plot(theta,R1,lw=2.5)

撰写回答