2016-03-03 10 views
7

1つの軸に複数のプロットがある場合、どのプロットが他のプロットの上にあるかを制御する方法があるのだろうかと思います。例:Matplotlibコントロールの上にプロットがあります

enter image description here

あなたが見ることができるように、グリーンシリーズは、青シリーズの最上位にあり、両方のシリーズは、(私は散布図で作られた)黒のドットの上にあります。私は、黒い点が両方のシリーズ(ライン)の上にあることを望みます。

私が最初に次のコード

plt.plot(series1_x, series1_y) 
plt.plot(series2_x, series2_y) 
plt.scatter(series2_x, series2_y) 

で上記をしたがその後、私は、次の

fig = plt.figure() 
ax1 = fig.add_subplot(111) 
ax1.plot(series1_x, series1_y) 

ax2 = fig.add_subplot(111) 
ax2.plot(series2_x, series2_y) 

ax3 = fig.add_subplot(111) 
ax3.scatter(series2_x, series2_y) 

そして、その上でいくつかのバリエーションが、運を試してみました。

plot関数をスワップすると、どのプロットが上に表示されるかに影響しますが、scatter関数を置く場所に関係なく、行はドットの上に表示されます。

注:

私は、Windows 10(この例)でPython 3.5を使用しますが、ほとんどのPython 3.4のUbuntuにしています。

注2:

私は、これは些細な問題のように見えるかもしれませんけど、私は、ドットの上に、一連のドットの色を隠さ得られるように密集している場合があり、中にそのような場合、私はどのドットがどの色であるかを明確に見るために読者が必要なので、その上にドットが必要なのはなぜですか。

+0

新しいプロットごとにサブプロット軸を再作成するのはなぜですか? 1つのサブプロットを作成してそこにすべてのプロットを作成することができます(下の回答のようにzorderを使用して上にあるものを制御します) – tom

+0

私はそこに示したものに「いくつかのバリエーション」を行ったと言いましたそれだけでサブプロットもしてください。私は通常plt.plot、plt.scatterなどでそれを行うだけです。私は通常、軸と図形オブジェクトについて心配する必要はありません。別の関数を渡し、あらゆる種類の面白いものを実行する必要がない限りです。 –

答えて

12

zorder kwargを使用してください。

plt.plot(series1_x, series1_y, zorder=1) 
plt.plot(series2_x, series2_y, zorder=2) 
plt.scatter(series2_x, series2_y, zorder=3) 
+0

偉大な、完全に動作します。ニースエレガントなソリューション。私は、 'zorder'の値が、前のプロットの' zorder'にデフォルトで1から始まると仮定します。だから、 'zorder'を持たない' plot'(最初のもの)、 'zorder = 1'を' plot'、 'zorder'を指定しないで次の' plot'を 'zorder = 2'、等..? –

+0

申し訳ありませんが、上の私のコメントでは、 "zorder"の値のデフォルト値に1と前のプロットの 'zorder'の値が加算されていることを意味していました..." –

+0

はい、私のテストではそうです。 – bernie

1

知っZORDERを使用して、そして価値のほかに別の解決策:あなたは、単にplotコマンドを使用してポイントのばらつきをプロットすることができます。何かのようなplot(series2_x, series2_y, ' o')。スペースがある' o'には、線がなく円の点があることに注意してください。このように、軸上にプロットする順番が上になります。

+0

これもうまくいく、ありがとう。 'plot'を使用するには、マーカーのサイズをどのように設定しますか? 'scatter'では' s'パラメータを設定してサイズを設定しています。 –

+1

具体的な質問のために、あなたのplotコマンドに 'markersize = 10'や' ms = 10'(あるいは何でも好きな数)の引数を加えることができます。議論と機能の完全なリストはここに見ることができます:http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.plot – zephyr

1

はい、できます。 zorderパラメータを使用してください。値が高いほど、プロットは上に表示されます。

fig = plt.figure() 
ax1 = fig.add_subplot(111) 
ax1.plot(series1_x, series1_y, zorder=3) 

ax2 = fig.add_subplot(111) 
ax2.plot(series2_x, series2_y, zorder=4) 

ax3 = fig.add_subplot(111) 
ax3.scatter(series2_x, series2_y, zorder=5) 

また、ラインとマーカーのプロットを同時に行うこともできます。ラインとマーカ面に異なる色を設定することもできます。

fig = plt.figure() 
ax1 = fig.add_subplot(111) 
ax1.plot(series1_x, series1_y) 

ax2 = fig.add_subplot(111) 
ax2.plot(series2_x, series2_y, '-o', color='b', mfc='k') 

'-o'は、マーカーを直線と円する印刷スタイルを設定color='b'セットのラインの色青色及びmfc='k'が黒にマーカ面の色を設定します。

+0

なぜこの答えが下降したのか分かりません - それは他のものと同じ情報を与えました(良い)回答し、まともな選択肢を与えた。 –

関連する問題