2017-05-08 3 views
0

これを調べると、イテレータとループを使用してnのデータをプロットする答えが見つかりました。Pythonは、ループなしで不明な数の行の色とラベルを描画します

ループを使用せずに行う方法はありますか?

私はn列を含むodataの配列を持っています。最初の列は横軸です。私は残りをプロットしたい。

私はこのようなコードの行を持っている:

plt.plot(odata[:,0],odata[:,1:],'-') 

これは、プロットを行い、しかし、私は私自身の色やラベルを追加します。どうやって?

+0

なぜループを使用したくないですか?ループは非常に基本的で一般的なプログラミングのアイデアです。それが仕事のための正しいツールであるときにそれを避ける理由はありません。 –

+0

あなたはそれがループなしではできないと言っていますか? – Mannix

+0

厳しい意味では、はい。ループなしではできません。ループを自分でPythonコードに書くか、単一行のPythonの範囲構文を使うかによって、ループが起こっています(この場合、Pythonはループバックをしています)。明白なループなしであなたが望むことをするコードを書くことは可能かもしれませんが、実行するとループが起こります。 –

答えて

0

あなたはplt.plotの戻り値を使用して作成されLine2Dオブジェクトにアクセスし、直接そのリストに基づいてlegendを設定することができます。

labels = ['a', 'b', 'c'] 
lines = plt.plot(odata[:, 0], odata[:, 1:], '-') 
plt.legend(lines, labels) 

ラベルと線の数は必ずしも一致する必要はありません。線が少ない場合、ラベルのいくつかは使用されません。ラベルの数が少ない場合、行の一部がラベルなしになります。 Hereはドキュメントの凡例です。

がシームレスな色の順序を変更するには、ドキュメントからthisの例のようにmatplotlib.rcを介してグローバルコンフィギュレーションでサイクラーを設定するか、またはあなたのプロットを行うためのオブジェクト指向のAPIを使用する必要があります。その後、グローバル設定を混乱させることなく、個々の軸にset_prop_cycleを使用することができます。

ここでは、カラーサイクラーを個人的な好みの順に設定する3つの方法があります。私はここでしか色を設定する方法を示していることに注意してください、しかし、あなたも同様に線のスタイルと、おそらく他の属性の順序を制御できます。

import matplotlib as mpl 
from matplotlib import cycler 
from matplotlib import pyplot as plt 

labels = ['a', 'b', 'c'] 
colors = ['r', 'g', 'b'] 

mpl.rc('axes', prop_cycle=cycler('color', ['r', 'g', 'b', 'y'])) 

lines = plt.plot(odata[:, 0], odata[:, 1:], '-') 
plt.legend(lines, labels) 
    1. は、グローバルコンフィギュレーションを設定します。グローバルコンフィギュレーションを設定しますが、あなたのプロットの変更が効果的にローカルにするためにrc_contextコンテキストマネージャを使用して:

      import matplotlib as mpl 
      from matplotlib import cycler,rc_context 
      from matplotlib import pyplot as plt 
      
      labels = ['a', 'b', 'c'] 
      colors = ['r', 'g', 'b'] 
      
      with rc_context(rc={'axes.prop_cycle': cycler('color', ['r', 'g', 'b', 'y'])}): 
          lines = plt.plot(odata[:, 0], odata[:, 1:], '-') 
          plt.legend(lines, labels) 
      
    2. のSe始まり、そして唯一のあなたが実際に変更するAxesに変更を適用するには、オブジェクト指向のAPIを使用してプロットをアップT:

      from matplotlib import pyplot as plt 
      
      labels = ['a', 'b', 'c'] 
      colors = ['r', 'g', 'b'] 
      
      fig, ax = plt.subplots() 
      ax.set_prop_cycle('color', colors) 
      ax.plot(odata[:, 0], odata[:, 1:], '-') 
      ax.legend(labels) 
      

    私は一般的なルールとして、オブジェクト指向のAPIをお勧めします特にスタンドアロンのスクリプトでは、はるかに高い柔軟性を提供し、またどのオブジェクトが操作されるかを正確に把握するという観点からも明確です。

  • 関連する問題