Pandas / matplotlib 막대 그래프 사용자 지정 색상을 제공하는 방법
방금 누적 막대 차트를 생성하기 위해 Excel 대신 pandas / matplotlib를 사용하기 시작했습니다. 문제가 발생했습니다
(1) 기본 컬러 맵에는 5 개의 색상 만 있으므로 5 개 이상의 카테고리가 있으면 색상이 반복됩니다. 더 많은 색상을 지정하려면 어떻게해야합니까? 이상적으로는 시작 색상과 끝 색상이있는 그라디언트와 그 사이에 n 개의 색상을 동적으로 생성하는 방법이 있습니까?
(2) 색상이 시각적으로 그다지 즐겁지 않습니다. n 색상의 사용자 정의 세트를 지정하려면 어떻게합니까? 또는 그라디언트도 작동합니다.
위의 두 가지 사항을 모두 보여주는 예는 다음과 같습니다.
4 from matplotlib import pyplot
5 from pandas import *
6 import random
7
8 x = [{i:random.randint(1,5)} for i in range(10)]
9 df = DataFrame(x)
10
11 df.plot(kind='bar', stacked=True)
출력은 다음과 같습니다.
color
옵션을 plot
함수에 대한 목록으로 직접 지정할 수 있습니다 .
from matplotlib import pyplot as plt
from itertools import cycle, islice
import pandas, numpy as np # I find np.random.randint to be better
# Make the data
x = [{i:np.random.randint(1,5)} for i in range(10)]
df = pandas.DataFrame(x)
# Make a list by cycling through the colors you care about
# to match the length of your data.
my_colors = list(islice(cycle(['b', 'r', 'g', 'y', 'k']), None, len(df)))
# Specify this list of colors as the `color` option to `plot`.
df.plot(kind='bar', stacked=True, color=my_colors)
사용자 정의 목록을 정의하려면 다음 중 몇 가지를 수행하거나 RGB 값 등으로 색상 항목을 정의하기위한 Matplotlib 기술을 검색 할 수 있습니다. 원하는만큼 복잡해질 수 있습니다.
my_colors = ['g', 'b']*5 # <-- this concatenates the list to itself 5 times.
my_colors = [(0.5,0.4,0.5), (0.75, 0.75, 0.25)]*5 # <-- make two custom RGBs and repeat/alternate them over all the bar elements.
my_colors = [(x/10.0, x/20.0, 0.75) for x in range(len(df))] # <-- Quick gradient example along the Red/Green dimensions.
마지막 예제는 다음과 같은 간단한 색상 그라디언트를 생성합니다.
범례가 정의 된 색상을 선택하도록 강요하는 방법을 알아낼만큼 충분히 오래 플레이하지는 않았지만, 당신이 할 수 있다고 확신합니다.
그러나 일반적으로 Matplotlib의 함수를 직접 사용하는 것이 좋습니다. Pandas에서 호출하는 것은 괜찮지 만 Matplotlib에서 직접 호출하면 더 나은 옵션과 성능을 얻을 수 있습니다.
가장 쉬운 방법은 미리 설정된 색상 그라디언트 중 하나와 함께 colormap
매개 변수 를 사용하는 .plot()
것입니다.
df.plot(kind='bar', stacked=True, colormap='Paired')
여기에서 사전 설정 컬러 맵 의 큰 목록을 찾을 수 있습니다 .
For a more detailed answer on creating your own colormaps, I highly suggest visiting this page
If that answer is too much work, you can quickly make your own list of colors and pass them to the color
parameter. All the colormaps are in the cm
matplotlib module. Let's get a list of 30 RGB (plus alpha) color values from the reversed inferno colormap. To do so, first get the colormap and the pass it a sequence of values between 0 and 1. Here, we use np.linspace
to create 30 equally-spaced values between .4 and .8 that represent that portion of the colormap.
from matplotlib import cm
color = cm.inferno_r(np.linspace(.4,.8, 30))
color
array([[ 0.865006, 0.316822, 0.226055, 1. ],
[ 0.851384, 0.30226 , 0.239636, 1. ],
[ 0.832299, 0.283913, 0.257383, 1. ],
[ 0.817341, 0.270954, 0.27039 , 1. ],
[ 0.796607, 0.254728, 0.287264, 1. ],
[ 0.775059, 0.239667, 0.303526, 1. ],
[ 0.758422, 0.229097, 0.315266, 1. ],
[ 0.735683, 0.215906, 0.330245, 1. ],
.....
Then we can use this to plot - using the data from the original post:
import random
x = [{i:random.randint(1,5)} for i in range(30)]
df = pd.DataFrame(x)
df.plot(kind='bar', stacked=True, color=color, legend=False, figsize=(12,4))
참고URL : https://stackoverflow.com/questions/11927715/how-to-give-a-pandas-matplotlib-bar-graph-custom-colors
'Programing' 카테고리의 다른 글
Python / Matplotlib-불연속 축을 만드는 방법이 있습니까? (0) | 2020.11.15 |
---|---|
OrderedDict의 시작 부분에 요소를 추가하는 방법은 무엇입니까? (0) | 2020.11.15 |
안드로이드 활동에 창 com.android.internal.policy.impl.phonewindow $ decorview가 유출되었습니다. (0) | 2020.11.14 |
TeamCity가 관리자 암호를 잊어 버린 경우-어디에서 확인해야합니까? (0) | 2020.11.14 |
SQL WHERE-Clause의 집계 함수 (0) | 2020.11.14 |