컬러 맵을 사용하는 matplotlib의 막대 차트

Sep 25 2020

두 개의 열이있는 df가 있습니다.

  • y : y 축에 대한 다른 숫자 값
  • days : 4 개의 다른 요일 이름 (월요일, 화요일, 수요일, 목요일)

또한 내가 직접 만든 4 가지 색상의 컬러 맵이 있으며 ListedColorMap 객체입니다.

x 축에 네 가지 범주 (요일)가 있고 y 축에 해당 값이있는 막대 차트를 만들고 싶습니다. 동시에 내 컬러 맵을 사용하여 각 막대가 다른 색상을 갖기를 원합니다.

다음은 막대 차트를 작성하는 데 사용한 코드입니다.

def my_barchart(my_df, my_cmap):
  fig = plt.figure()
  ax = fig.add_axes([0,0,1,1])
  ax.bar(my_df['days'], my_df['y'], color=my_cmap)
  return fig

그러나 다음과 같은 오류가 발생합니다. " 'ListedColormap'유형의 개체에는 len ()이 없습니다."이므로 my_cmap을 올바르게 사용하고 있지 않은 것 같습니다.

함수에서이를 제거하고 실행하면 모든 막대의 색상이 같은 것을 제외하고 막대 차트가 정상적으로 보입니다. 그래서 내 질문은 : 막대 차트와 함께 컬러 맵을 사용하는 올바른 방법은 무엇입니까?

답변

4 JakeLevi Sep 25 2020 at 17:29

color인수 중 문자열 또는 RGB [A]의 값을 원 (그것은 단일 컬러, 또는 각각의 데이터는 플로팅되는 포인트에 대한 하나의 색상의 시퀀스가 될 수있다). 색상 맵은 일반적으로 [0, 1] 범위의 부동 소수점으로 호출 할 수 있습니다.

따라서 원하는 것은 각 막대의 색상에 대해 원하는 값을 가져 와서 [0, 1] 범위로 my_cmap조정 한 다음 다시 조정 된 값으로 호출 하는 것입니다.

예를 들어 색상이 y 값 (막대 높이)에 해당하도록하려는 경우 다음과 같이 코드를 수정해야합니다 ( import numpy as np이전에 호출했다고 가정 ).

def my_barchart(my_df, my_cmap):
    rescale = lambda y: (y - np.min(y)) / (np.max(y) - np.min(y))

    fig = plt.figure()
    ax = fig.add_axes([0,0,1,1])
    ax.bar(my_df['days'], my_df['y'], color=my_cmap(rescale(my_df['y'])))
    return fig

다음은 a color의 출력과 함께 인수를 사용하는 자체 포함 된 최소 예제입니다 cmap.

import matplotlib.pyplot as plt
import numpy as np

x = np.array([1, 2, 3])
y = np.array([4, 5, 6])

my_cmap = plt.get_cmap("viridis")
rescale = lambda y: (y - np.min(y)) / (np.max(y) - np.min(y))

plt.bar(x, y, color=my_cmap(rescale(y)))
plt.savefig("temp")

산출:

aprendiz Sep 25 2020 at 17:45

좋아, 내 가치를 확장하지 않고도이 작업을 수행 할 수있는 방법을 찾았습니다.

def my_barchart(my_df, my_cmap):
  fig = plt.figure()
  ax = fig.add_axes([0,0,1,1])
  ax.bar(my_df['days'], my_df['y'], color=my_cmap.colors)
  return fig

.colors퇴근 후 추가하기 만하면됩니다 my_cmap!