산란 용 matplotlib 컬러 바


89

저는 데이터가 3 개의 플로팅 매개 변수 인 x, y, c가있는 데이터로 작업하고 있습니다. 산점도에 대한 사용자 지정 색상 값을 어떻게 생성합니까?

예제를 확장하면 다음과 같습니다.

import matplotlib
import matplotlib.pyplot as plt
cm = matplotlib.cm.get_cmap('RdYlBu')
colors=[cm(1.*i/20) for i in range(20)]
xy = range(20)
plt.subplot(111)
colorlist=[colors[x/2] for x in xy] #actually some other non-linear relationship
plt.scatter(xy, xy, c=colorlist, s=35, vmin=0, vmax=20)
plt.colorbar()
plt.show()

그러나 결과는 TypeError: You must first set_array for mappable

답변:


196

scatter 1 에 대한 matplotlib 문서에서 :

cmap은 c가 부동 소수점 배열 인 경우에만 사용됩니다.

따라서 colorlist는 현재 가지고있는 튜플 목록이 아닌 float 목록이어야합니다. plt.colorbar ()는 plt.scatter ()가 반환하는 CircleCollection과 같은 매핑 가능한 객체를 원합니다. vmin 및 vmax는 컬러 바의 한계를 제어 할 수 있습니다. vmin / vmax 외부의 항목은 끝점의 색상을 가져옵니다.

이것이 당신을 위해 어떻게 작동합니까?

import matplotlib.pyplot as plt
cm = plt.cm.get_cmap('RdYlBu')
xy = range(20)
z = xy
sc = plt.scatter(xy, xy, c=z, vmin=0, vmax=20, s=35, cmap=cm)
plt.colorbar(sc)
plt.show()

이미지 예


나는 그것을 시도하고 얻었다 'AxesSubplot' object has no attribute 'colorbar'. 내가 했어 ax.colorbar()... 내가 뭘 잘못하고 있니?
Lucas Aimaretto 2018 년

하기 matplotlib의 OOP 인터페이스를 사용하는 경우이 예는 명확한 응용 프로그램을 제공하지 않습니다 matplotlib.org/gallery/api/agg_oo_sgskip.html
RYSZARD Cetnarski

18

다음은 컬러 바를 추가하는 OOP 방법 입니다.

fig, ax = plt.subplots()
im = ax.scatter(x, y, c=c)
fig.colorbar(im, ax=ax)

이 작업을 수행하면 모든 점이 맨 오른쪽에있는 플롯의 은색 내에 있고 컬러 바가 하단을 가로 지르는 매우가는 선이되도록 플롯이 완전히 재조정됩니다.
Marses

plt컬러 바를 플롯 하는 데 직접 사용 하는 정답 은 제 생각에 권장되는 방법이 아닙니다. 당신의 방법은 칭찬받는 방법입니다.
GoingMyWay

2

두 개의 변수로 분산시키고 세 번째로 색상을 지정하려는 경우 Altair 가 훌륭한 선택이 될 수 있습니다.

데이터 세트 만들기

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

df = pd.DataFrame(40*np.random.randn(10, 3), columns=['A', 'B','C'])

알테어 플롯

from altair import *
Chart(df).mark_circle().encode(x='A',y='B', color='C').configure_cell(width=200, height=150)

음모

여기에 이미지 설명 입력

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