2012-02-09 200 views
4

我在Matplotlib中更改我的座標軸標籤時出現問題。我想在我的Polar Plot中更改徑向軸選項。更改Matplotlib/Python中的極座標圖的軸選項

基本上,我正在計算一個圓柱體的變形,這只是半徑偏離原始圓柱體(完全圓形)的程度。一些畸變值爲負值,而另一些值則由於拉伸和壓縮力而爲正值。我正在尋找一種方法來以圖形方式在圓柱座標中表示這一點,所以我認爲極座標圖是我最好的選擇。 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) 

我的情節看起來如下: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

一旦我得到這個,我可以手動添加軸標籤和硬編碼到我的腳本。但這是一個非常醜陋的方式。有沒有什麼辦法可以直接獲取Excel雷達圖表的Matplotlib等價物並更改我的軸標籤而無需操縱我的輸入數據?

+0

重複:http://stackoverflow.com/questions/9216661/polar-plot-with-negative-radial-coordinates-in- python-matplotlib – 2012-02-10 00:24:13

+1

另外,我想你必須添加偏移量並自己更改標籤。根據定義,極座標不能有負'r'。你應該可以爲它編寫一個函數;使用'ax2.set_yticks([y-offset for ax2.get_yticks()])中的偏移量''作爲標籤。 – 2012-02-10 00:26:18

+0

好吧,我想我的問題的答案。這說得通;極座標圖不能有負的徑向座標。我想我必須編寫自己的函數來模仿Excel的雷達圖表。 – prrao 2012-02-10 02:55:00

回答

7

你可以使用設置軸限制的正常方式:

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

OMG我一直在嘗試常規方法,但看起來像忘了使用'ax1.set_yticks'選項。非常感謝! – prrao 2012-02-14 15:28:10