컬러 맵을 사용하는 matplotlib의 막대 차트
두 개의 열이있는 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을 올바르게 사용하고 있지 않은 것 같습니다.
함수에서이를 제거하고 실행하면 모든 막대의 색상이 같은 것을 제외하고 막대 차트가 정상적으로 보입니다. 그래서 내 질문은 : 막대 차트와 함께 컬러 맵을 사용하는 올바른 방법은 무엇입니까?
답변
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")
산출:
좋아, 내 가치를 확장하지 않고도이 작업을 수행 할 수있는 방법을 찾았습니다.
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!