저는 데이터가 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
답변
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()
답변
다음은 컬러 바를 추가하는 OOP 방법 입니다.
fig, ax = plt.subplots()
im = ax.scatter(x, y, c=c)
fig.colorbar(im, ax=ax)
답변
두 개의 변수로 분산시키고 세 번째로 색상을 지정하려는 경우 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)