2013-05-17 31 views
7

ラジアル軸の始点をオフセットしたり、グラフの外に移動することができますか?Matplotlib極座標プロットラジアル軸オフセット

これは私が達成するために望んでいるものです:

Goal

そして、これは私が今のところ持っているものです。

CurRes

私はSOのドキュメントやさまざまなトピックを読みましたが、私は役に立つ何かを見つけることができませんでした。どこにも言及されていなければ、それは可能ではないということですか?

ありがとうございます。

EDIT(プロットを作成するために使用されるコードの追加抜粋):

ax = fig.add_subplot(111, projection='polar') 
ax.set_theta_zero_location('N') 
ax.set_theta_direction(-1)  
ax.plot(X,lines[li]*yScalingFactor,label=linelabels[li],color=color,linestyle=ls) 
+0

図を作成したコードを投稿してください。 –

+0

極座標プロットのコードは標準ですが、投稿を編集してコードを追加しました。 データは数式からではなく、一連のデータから得られます。 – Renesis

答えて

6

私はpolar plotがそのように調整することができるかどうかわからないです。しかし、ここにはthe last example given here: Floating Axesに基づく回避策があります。あなたはそれをコピー&ペースト/場合

私は、それが実行する必要があり、コード内の説明のコメントが含まれているとして、次のとおりです。

pseudo polar plot

import mpl_toolkits.axisartist.floating_axes as floating_axes 
from matplotlib.projections import PolarAxes 
from mpl_toolkits.axisartist.grid_finder import FixedLocator, \ 
    MaxNLocator, DictFormatter 
import numpy as np 
import matplotlib.pyplot as plt 

# generate 100 random data points 
# order the theta coordinates 

# theta between 0 and 2*pi 
theta = np.random.rand(100)*2.*np.pi 
theta = np.sort(theta) 

# "radius" between 0 and a max value of 40,000 
# as roughly in your example 
# normalize the r coordinates and offset by 1 (will be clear later) 
MAX_R = 40000. 
radius = np.random.rand(100)*MAX_R 
radius = radius/np.max(radius) + 1. 

# initialize figure: 
fig = plt.figure() 

# set up polar axis 
tr = PolarAxes.PolarTransform() 

# define angle ticks around the circumference: 
angle_ticks = [(0, r"$0$"), 
       (.25*np.pi, r"$\frac{1}{4}\pi$"), 
       (.5*np.pi, r"$\frac{1}{2}\pi$"), 
       (.75*np.pi, r"$\frac{3}{4}\pi$"), 
       (1.*np.pi, r"$\pi$"), 
       (1.25*np.pi, r"$\frac{5}{4}\pi$"), 
       (1.5*np.pi, r"$\frac{3}{2}\pi$"), 
       (1.75*np.pi, r"$\frac{7}{4}\pi$")] 

# set up ticks and spacing around the circle 
grid_locator1 = FixedLocator([v for v, s in angle_ticks]) 
tick_formatter1 = DictFormatter(dict(angle_ticks)) 

# set up grid spacing along the 'radius' 
radius_ticks = [(1., '0.0'), 
       (1.5, '%i' % (MAX_R/2.)), 
       (2.0, '%i' % (MAX_R))] 

grid_locator2 = FixedLocator([v for v, s in radius_ticks]) 
tick_formatter2 = DictFormatter(dict(radius_ticks)) 

# set up axis: 
# tr: the polar axis setup 
# extremes: theta max, theta min, r max, r min 
# the grid for the theta axis 
# the grid for the r axis 
# the tick formatting for the theta axis 
# the tick formatting for the r axis 
grid_helper = floating_axes.GridHelperCurveLinear(tr, 
                extremes=(2.*np.pi, 0, 2, 1), 
                grid_locator1=grid_locator1, 
                grid_locator2=grid_locator2, 
                tick_formatter1=tick_formatter1, 
                tick_formatter2=tick_formatter2) 

ax1 = floating_axes.FloatingSubplot(fig, 111, grid_helper=grid_helper) 
fig.add_subplot(ax1) 

# create a parasite axes whose transData in RA, cz 
aux_ax = ax1.get_aux_axes(tr) 

aux_ax.patch = ax1.patch # for aux_ax to have a clip path as in ax 
ax1.patch.zorder=0.9 # but this has a side effect that the patch is 
        # drawn twice, and possibly over some other 
        # artists. So, we decrease the zorder a bit to 
        # prevent this. 

# plot your data: 
aux_ax.plot(theta, radius) 
plt.show() 

これは、次のプロットを生成します。あなたは、あなたの要求を満たすために軸のラベルを微調整する必要があります。
それ以外の場合は、プロットの場合と同じ問題が発生する可能性があります。内側の空白の円は点に合わせてスケーリングされているためです。極座標プロットを使ってスケーリングを試してみて、ラジアル軸にカスタムラベルを貼って同様の効果を得ることもできます。

+0

私はしばらく活動しておらず、誰かが実際に助けてくれるとは思わなかった。 これは幾分助けになり、必要に応じて変更できるようになることを願っています。 – Renesis

+0

私は月曜日にこれを修正しようと考えています。結果を報告します。 もう一度ありがとうございます。 – Renesis

関連する問題