2016-06-17 14 views
3

軸の内部を掘ることなく、matplotlibのカラーサイクルを簡単に増やす方法はありますか? matplotlibのカラーサイクルを増やす

プロット対話的に私が使用する一般的なパターンは次のとおりです。

import matplotlib.pyplot as plt 

plt.figure() 
plt.plot(x,y1) 
plt.twinx() 
plt.plot(x,y2) 

Y1およびY2が、両方のプロットに異なるのyスケールを得るために必要でplt.twinx()はそれを作るデフォルトのcolorcycleの最初の色で描かれています各プロットの色を手動で宣言するために必要です。

明示的に色を付けるのではなく、色のサイクルを増やすように2番目のプロットを指示するには、省略表現が必要です。もちろん、color='b'またはcolor='r'を2つのプロットに設定するのは簡単ですが、ggplotのようなカスタムスタイルを使用する場合、現在のカラーサイクルからカラーコードを参照する必要があります。これはインタラクティブな使用のために面倒です。

答えて

5

あなたは色に色サイクラーを進めるために

ax2._get_lines.get_next_color() 

を呼び出すことができます。残念ながら、これはプライベート属性._get_linesにアクセスするため、これは公式の公開APIの一部ではなく、将来のバージョンのmatplotlibで動作することは保証されていません。カラーサイクラーがnullプロットをプロットすることであろう

事前の安全なあまり直接的な方法:

ax2.plot([], []) 

import numpy as np 
import matplotlib.pyplot as plt 

x = np.arange(10) 
y1 = np.random.randint(10, size=10) 
y2 = np.random.randint(10, size=10)*100 
fig, ax = plt.subplots() 
ax.plot(x, y1, label='first') 
ax2 = ax.twinx() 
ax2._get_lines.get_next_color() 
# ax2.plot([], []) 
ax2.plot(x,y2, label='second') 

handles1, labels1 = ax.get_legend_handles_labels() 
handles2, labels2 = ax2.get_legend_handles_labels() 
ax.legend(handles1+handles2, labels1+labels2, loc='best') 

plt.show() 

enter image description here

+0

これは、問題を解決するが、これは単にです私が避けようとしていた冗長な言葉。明示的にAxesオブジェクトを使ってプロットを構成するのは一般的には良い考えですが、gca()に頻繁に書き込むplt.plot()ショートカットを使用しています。 – Mike

+0

実際、私は答えを誤解しました。 1行で色を変えるようです。複雑な部分は双子軸のために働く伝説を得ている。 – Mike

+0

plt.subplots()のような、色と凡例のようなものを同じキャンバスにいくつかの軸を直感的に生成できるファクトリを持つといいでしょう。 – Mike

関連する問題