【问题标题】:Changing axis options for Polar Plots in Matplotlib/Python在 Matplotlib/Python 中更改极坐标图的轴选项
【发布时间】:2012-03-02 10:11:48
【问题描述】:

我在 Matplotlib 中更改轴标签时遇到问题。我想更改极坐标图中的径向轴选项。

基本上,我正在计算圆柱体的变形,这只不过是半径与原始(完美圆形)圆柱体的偏差。由于拉伸和压缩力,一些变形值为负值,而另一些为正值。我正在寻找一种在柱坐标中以图形方式表示它的方法,所以我认为极坐标图是我最好的选择。 Excel 给了我一个“雷达图”选项,它足够灵活,可以让我指定最小和最大径向轴值。我想使用 Matplotlib 在 Python 上复制它。

我在极坐标上绘制的 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)

我的情节如下:

但这不是我想要呈现的方式。我想改变我的径向轴,这样我就可以将数据显示为与某个参考值的偏差,比如-2。如何在极坐标中询问 Matplotlib 更改最小轴标签?我可以在 Excel 中非常轻松地做到这一点。我选择最小径向值 -2,得到以下 Excel 雷达图:

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

情节如下图:

获得此信息后,我可以手动添加轴标签并将其硬编码到我的脚本中。但这是一种非常丑陋的方式。有什么方法可以直接获得与 Excel 雷达图等效的 Matplotlib 并更改我的轴标签,而无需操作我的输入数据?

【问题讨论】:

  • 另外,我认为您必须自己添加偏移量并更改标签。根据定义,极坐标不能有负“r”。不过,您应该能够为它编写一个函数;使用ax2.set_yticks([y-offset for offset in ax2.get_yticks()]) 作为标签。
  • 好吧,我想我的问题已经回答了。这说得通;极坐标图不能有负径向坐标。我想我必须编写自己的函数来模仿 Excel 的雷达图。

标签: python plot matplotlib axis-labels polar-coordinates


【解决方案1】:

您可以使用设置轴限制的正常方式:

#!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)

【讨论】:

  • 天啊,我一直在尝试正常的方法,但看起来我忘了使用 ax1.set_yticks 选项。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-13
  • 2017-05-18
  • 1970-01-01
  • 1970-01-01
  • 2017-08-22
  • 2014-05-15
  • 1970-01-01
相关资源
最近更新 更多