Program Tip

matplotlib Python에서 다른 막대 색상 설정

programtip 2020. 12. 10. 21:02
반응형

matplotlib Python에서 다른 막대 색상 설정


이 질문에 이미 답변이 있습니다.

가정하면 아래와 같은 막대 차트가 있습니다.

BarPlot

각 캐리어마다 다른 색상을 설정하는 방법에 대한 아이디어가 있습니까? 예를 들어 AK는 Red, GA는 Green 등?

Python에서 Pandas와 matplotlib를 사용하고 있습니다.

>>> f=plt.figure()
>>> ax=f.add_subplot(1,1,1)
>>> ax.bar([1,2,3,4], [1,2,3,4])
<Container object of 4 artists>
>>> ax.get_children()
[<matplotlib.axis.XAxis object at 0x6529850>, <matplotlib.axis.YAxis object at 0x78460d0>,  <matplotlib.patches.Rectangle object at 0x733cc50>, <matplotlib.patches.Rectangle object at 0x733cdd0>, <matplotlib.patches.Rectangle object at 0x777f290>, <matplotlib.patches.Rectangle object at 0x777f710>, <matplotlib.text.Text object at 0x7836450>, <matplotlib.patches.Rectangle object at 0x7836390>, <matplotlib.spines.Spine object at 0x6529950>, <matplotlib.spines.Spine object at 0x69aef50>, <matplotlib.spines.Spine object at 0x69ae310>, <matplotlib.spines.Spine object at 0x69aea50>]
>>> ax.get_children()[2].set_color('r') #You can also try to locate the first patches.Rectangle object instead of direct calling the index.

위의 제안에 대해 어떻게 정확히 ax.get_children ()을 열거하고 객체 유형이 직사각형인지 확인할 수 있습니까? 그렇다면 객체가 직사각형이면 다른 임의의 색상을 할당할까요?


간단하고 사용하기 .set_color

>>> barlist=plt.bar([1,2,3,4], [1,2,3,4])
>>> barlist[0].set_color('r')
>>> plt.show()

여기에 이미지 설명 입력

새 질문에 대해서는 그다지 어렵지 않지만 축에서 막대를 찾으면됩니다. 예 :

>>> f=plt.figure()
>>> ax=f.add_subplot(1,1,1)
>>> ax.bar([1,2,3,4], [1,2,3,4])
<Container object of 4 artists>
>>> ax.get_children()
[<matplotlib.axis.XAxis object at 0x6529850>, 
 <matplotlib.axis.YAxis object at 0x78460d0>,  
 <matplotlib.patches.Rectangle object at 0x733cc50>, 
 <matplotlib.patches.Rectangle object at 0x733cdd0>, 
 <matplotlib.patches.Rectangle object at 0x777f290>, 
 <matplotlib.patches.Rectangle object at 0x777f710>, 
 <matplotlib.text.Text object at 0x7836450>, 
 <matplotlib.patches.Rectangle object at 0x7836390>, 
 <matplotlib.spines.Spine object at 0x6529950>, 
 <matplotlib.spines.Spine object at 0x69aef50>,
 <matplotlib.spines.Spine object at 0x69ae310>, 
 <matplotlib.spines.Spine object at 0x69aea50>]
>>> ax.get_children()[2].set_color('r') 
 #You can also try to locate the first patches.Rectangle object 
 #instead of direct calling the index.

복잡한 플롯이 있고 먼저 막대를 식별하려면 다음을 추가하십시오.

>>> import matplotlib
>>> childrenLS=ax.get_children()
>>> barlist=filter(lambda x: isinstance(x, matplotlib.patches.Rectangle), childrenLS)
[<matplotlib.patches.Rectangle object at 0x3103650>, 
 <matplotlib.patches.Rectangle object at 0x3103810>, 
 <matplotlib.patches.Rectangle object at 0x3129850>, 
 <matplotlib.patches.Rectangle object at 0x3129cd0>, 
 <matplotlib.patches.Rectangle object at 0x3112ad0>]

데이터를 플로팅하기 위해 Series.plot ()을 사용하고 있다고 가정합니다. 여기 Series.plot ()에 대한 문서를 보면 :

http://pandas.pydata.org/pandas-docs/dev/generated/pandas.Series.plot.html

막대 그래프의 색상을 설정할 수있는 색상 매개 변수가 나열되어 있지 않습니다 .

그러나 Series.plot () 문서는 매개 변수 목록의 끝에 다음을 명시합니다.

kwds : keywords
Options to pass to matplotlib plotting method

무엇을 의미하는 것은 당신이 지정할 때이다 종류 Series.plot () 등을위한 인수 실제로) matplotlib.pyplot.bar () 및 matplotlib.pyplot.bar을 (호출), Series.plot (모든 여분을 보내드립니다 Series.plot ()의 인수 목록 끝에 지정하는 키워드 인수입니다.

여기서 matplotlib.pyplot.bar () 메서드에 대한 문서를 살펴보면 :

http://matplotlib.org/api/pyplot_api.html#matplotlib.pyplot.bar

..it는 또한 매개 변수 목록 끝에 키워드 인수를 허용하며, 인식 된 매개 변수 이름 목록을 자세히 살펴보면 그중 하나는 color 이며 막대 그래프에 대해 다른 색상을 지정하는 시퀀스 일 수 있습니다.

모두 합쳐서 Series.plot () 인수 목록 끝에 color 키워드 인수 를 지정 하면 키워드 인수가 matplotlib.pyplot.bar () 메서드로 전달됩니다. 증거는 다음과 같습니다.

import pandas as pd
import matplotlib.pyplot as plt

s = pd.Series(
    [5, 4, 4, 1, 12],
    index = ["AK", "AX", "GA", "SQ", "WN"]
)

#Set descriptions:
plt.title("Total Delay Incident Caused by Carrier")
plt.ylabel('Delay Incident')
plt.xlabel('Carrier')

#Set tick colors:
ax = plt.gca()
ax.tick_params(axis='x', colors='blue')
ax.tick_params(axis='y', colors='red')

#Plot the data:
my_colors = 'rgbkymc'  #red, green, blue, black, etc.

pd.Series.plot(
    s, 
    kind='bar', 
    color=my_colors,
)

plt.show()

여기에 이미지 설명 입력

시퀀스의 색상보다 막대가 더 많으면 색상이 반복됩니다.


Pandas 0.17.0 업데이트

최신 판다 버전에 대한 @ 7stud의 답변은 전화를 걸면됩니다.

s.plot( 
    kind='bar', 
    color=my_colors,
)

대신에

pd.Series.plot(
    s, 
    kind='bar', 
    color=my_colors,
)

그래프 작성 기능은 시리즈의 회원이 될 한 DataFrame은 객체와 호출 사실 pd.Series.plot로모그래퍼 color인수에 오류가 있습니다

참고 URL : https://stackoverflow.com/questions/18973404/setting-different-bar-color-in-matplotlib-python

반응형