最初の線が青、次に緑、次に赤というようにプロットすると気づきました。
この色のリストにアクセスする方法はありますか?カラーサイクルを変更する方法やイテレータにアクセスする方法については100万件の投稿を見てきましたが、matplotlibがデフォルトで循環する色のリストを取得する方法についてはそうではありません。
回答:
matplotlibバージョン> = 1.5では、rcParam
呼び出されたaxes.prop_cycle
:を出力できます。
print plt.rcParams['axes.prop_cycle'].by_key()['color']
# [u'#1f77b4', u'#ff7f0e', u'#2ca02c', u'#d62728', u'#9467bd', u'#8c564b', u'#e377c2', u'#7f7f7f', u'#bcbd22', u'#17becf']
または同等に、python3
:
print(plt.rcParams['axes.prop_cycle'].by_key()['color'])
バージョン<1.5では、これは次のように呼ばれていましたcolor_cycle
。
print plt.rcParams['axes.color_cycle']
# [u'b', u'g', u'r', u'c', u'm', u'y', u'k']
デフォルトのカラーサイクルはバージョン2.0.0で変更されていることに注意してくださいhttp://matplotlib.org/users/dflt_style_changes.html#colors-in-default-property-cycle
plt.rcParams['axes.prop_cycle'].by_key()['color']
多くの場合、デフォルトのカラーサイクルであるため、どこからでもデフォルトのカラーサイクルを取得する必要はありません。したがって、それを使用するだけで十分です。
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)
t = np.arange(5)
for i in range(4):
line, = ax.plot(t,i*(t+1), linestyle = '-')
ax.plot(t,i*(t+1)+.3,color = line.get_color(), linestyle = ':')
plt.show()
別の何かにデフォルトのカラーサイクルを使用したい場合は、もちろんいくつかのオプションがあります。
まず、"tab10"
カラーマップにはデフォルトのカラーサイクルの色が含まれていることに注意してくださいcmap = plt.get_cmap("tab10")
。これは、を介して取得できます。
したがって、上記と同等です。
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)
t = np.arange(5)
cmap = plt.get_cmap("tab10")
for i in range(4):
ax.plot(t,i*(t+1), color=cmap(i), linestyle = '-')
ax.plot(t,i*(t+1)+.3,color=cmap(i), linestyle = ':')
plt.show()
カラーサイクラーを直接使用することもできcycle = plt.rcParams['axes.prop_cycle'].by_key()['color']
ます。これにより、サイクルの色のリストが表示され、繰り返し使用できます。
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)
t = np.arange(5)
cycle = plt.rcParams['axes.prop_cycle'].by_key()['color']
for i in range(4):
ax.plot(t,i*(t+1), color=cycle[i], linestyle = '-')
ax.plot(t,i*(t+1)+.3,color=cycle[i], linestyle = ':')
plt.show()
CN
表記法最後に、このCN
表記によりN
、カラーサイクルのth色を取得できますcolor="C{}".format(i)
。ただし、これは最初の10色でのみ機能します(N in [0,1,...9]
)
import numpy as np
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot(111)
t = np.arange(5)
for i in range(4):
ax.plot(t,i*(t+1), color="C{}".format(i), linestyle = '-')
ax.plot(t,i*(t+1)+.3,color="C{}".format(i), linestyle = ':')
plt.show()
ここに示されているすべてのコードは、同じプロットを生成します。
CN
はあなたの答えで表記法がはるかに目立つべきだと思います、私はほとんどそれを逃しました。ユースケースの大部分は、最初の10色にしかアクセスできないことに満足していると思い'C1'
ます。友人を渡すことは、プロペラサイクルを明示的に取得するよりもはるかに簡単です。
Matplotlibの新しい開発について説明したいと思います。以前の回答で私たちは読んだ
最後に、この
CN
表記によりN
、カラーサイクルのth色を取得できますcolor="C{}".format(i)
。ただし、これは最初の10色でのみ機能します(N in [0,1,...9]
)
だが
import numpy as np
import matplotlib.pyplot as plt
t = np.linspace(0,6.28, 629)
for N in (1, 2):
C0N, C1N = 'C%d'%(N), 'C%d'%(N+10)
plt.plot(t, N*np.sin(t), c=C0N, ls='-', label='c='+C0N)
plt.plot(t, N*np.cos(t), c=C1N, ls='--', label='c='+C1N)
plt.legend() ; plt.grid() ; plt.show()
与える
matplotlibがラインに使用するRGBカラーを取得するための簡単なワンライナーを探している場合は、次のとおりです。
>>> import matplotlib; print('\n'.join([str(matplotlib.colors.to_rgb(c)) for c in matplotlib.pyplot.rcParams['axes.prop_cycle'].by_key()['color']]))
(0.12156862745098039, 0.4666666666666667, 0.7058823529411765)
(1.0, 0.4980392156862745, 0.054901960784313725)
(0.17254901960784313, 0.6274509803921569, 0.17254901960784313)
(0.8392156862745098, 0.15294117647058825, 0.1568627450980392)
(0.5803921568627451, 0.403921568627451, 0.7411764705882353)
(0.5490196078431373, 0.33725490196078434, 0.29411764705882354)
(0.8901960784313725, 0.4666666666666667, 0.7607843137254902)
(0.4980392156862745, 0.4980392156862745, 0.4980392156862745)
(0.7372549019607844, 0.7411764705882353, 0.13333333333333333)
(0.09019607843137255, 0.7450980392156863, 0.8117647058823529)
またはuint8の場合:
import matplotlib; print('\n'.join([str(tuple(int(round(v*255)) for v in matplotlib.colors.to_rgb(c))) for c in matplotlib.pyplot.rcParams['axes.prop_cycle'].by_key()['color']]))
(31, 119, 180)
(255, 127, 14)
(44, 160, 44)
(214, 39, 40)
(148, 103, 189)
(140, 86, 75)
(227, 119, 194)
(127, 127, 127)
(188, 189, 34)
(23, 190, 207)
lines_colour_cycle = [p['color'] for p in plt.rcParams['axes.prop_cycle']]