기본 선 색상주기 가져 오기


95

첫 번째 선이 파란색, 녹색, 빨간색 등으로 표시되는 것을 확인했습니다.

이 색상 목록에 액세스 할 수있는 방법이 있습니까? 색상주기를 변경하거나 반복기에 액세스하는 방법에 대한 수백만 개의 게시물을 보았지만 기본적으로 matplotlib가 순환하는 색상 목록을 얻는 방법에 대해서는 언급하지 않았습니다.

답변:


118

하기 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


3
감사! 약간의 수정 : 첫 번째는 다음과 같아야합니다.lines_colour_cycle = [p['color'] for p in plt.rcParams['axes.prop_cycle']]
Peter

4
plt.rcParams['axes.prop_cycle'].by_key()['color']
@Peter

91

종종 기본 색상주기이므로 어디에서나 기본 색상주기를 가져올 필요가 없으므로 사용하는 것만으로도 충분합니다.

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"컬러 맵

먼저 "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색상주기 의 세 번째 색상 인 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()

여기에 제시된 모든 코드는 동일한 플롯을 생성합니다.


어떤 종류의 사이클을 사용하도록 matplotlib에 지시 할 수 있습니까? 색상 배열을 반복해야한다는 것은 한 번의 전체주기를 사용한 후 인덱스 0으로 돌아가는 논리를 추가해야 함을 의미합니다.
Mehdi

@Mehdi 물론, matplotlib는 색상 순환을 사용합니다. 이 질문은이주기의 색상을 구하는 것을 요구합니다.
ImportanceOfBeingErnest

5
나는 CN당신의 대답에서 표기법이 훨씬 더 두드러 져야 한다고 생각 합니다. 거의 놓쳤습니다. 대부분의 사용 사례는 처음 10 개의 색상에만 액세스 할 수 있다는 점에 만족하며 'C1', 친구를 전달 하는 것은 prop주기를 명시 적으로 파악하는 것보다 훨씬 적은 상용구입니다.
Andras Deak

3

재검토 된 CN 표기법

Matplotlib의 새로운 개발에 대해 설명하고 싶습니다. 이전 답변에서 우리는

마지막으로, CN표기법은 N색상주기 의 세 번째 색상 인 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()                                           

준다

여기에 이미지 설명 입력


2

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)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.