Python의 산점도 및 색상 매핑


91

점 x와 y의 범위가 numpy 배열에 저장되어 있습니다. x (t)와 y (t)를 나타냅니다. 여기서 t = 0 ... T-1

다음을 사용하여 산점도를 플로팅하고 있습니다.

import matplotlib.pyplot as plt

plt.scatter(x,y)
plt.show()

시간을 나타내는 컬러 맵을 갖고 싶습니다 (그러므로 numpy 배열의 인덱스에 따라 포인트를 채색)

그렇게하는 가장 쉬운 방법은 무엇입니까?

답변:


173

다음은 예입니다.

import numpy as np
import matplotlib.pyplot as plt

x = np.random.rand(100)
y = np.random.rand(100)
t = np.arange(100)

plt.scatter(x, y, c=t)
plt.show()

여기에서 인덱스에 따라 색상 설정하고 t단지 배열입니다 [1, 2, ..., 100]. 여기에 이미지 설명 입력

이해하기 쉬운 예는 약간 더 간단합니다.

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(100)
y = x
t = x
plt.scatter(x, y, c=t)
plt.show()

여기에 이미지 설명 입력

전달하는 배열 c은 특정 순서 나 유형을 가질 필요가 없습니다. 즉,이 예제 에서처럼 정렬하거나 정수일 필요가 없습니다. 플로팅 루틴은 최소 / 최대 값 c이 컬러 맵의 맨 아래 / 위에 해당하도록 컬러 맵을 조정합니다.

컬러 맵

다음을 추가하여 컬러 맵을 변경할 수 있습니다.

import matplotlib.cm as cm
plt.scatter(x, y, c=t, cmap=cm.cmap_name)

matplotlib.cm컬러 맵도 호출 할 수 있으므로 가져 오기 는 선택 사항 cmap="cmap_name"입니다. 각각의 모습을 보여주는 컬러 맵 의 참조 페이지 가 있습니다. 컬러 맵을 간단히 cmap_name_r. 그래서

plt.scatter(x, y, c=t, cmap=cm.cmap_name_r)
# or
plt.scatter(x, y, c=t, cmap="cmap_name_r")

작동합니다. 예는 "jet_r"또는 cm.plasma_r입니다. 다음은 새로운 1.5 컬러 맵 viridis의 예입니다.

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(100)
y = x
t = x
fig, (ax1, ax2) = plt.subplots(1, 2)
ax1.scatter(x, y, c=t, cmap='viridis')
ax2.scatter(x, y, c=t, cmap='viridis_r')
plt.show()

여기에 이미지 설명 입력

컬러 바

다음을 사용하여 컬러 바를 추가 할 수 있습니다.

plt.scatter(x, y, c=t, cmap='viridis')
plt.colorbar()
plt.show()

여기에 이미지 설명 입력

Figure와 서브 플롯을 명시 적으로 (예 : fig, ax = plt.subplots()또는 ax = fig.add_subplot(111)) 사용하는 경우 컬러 바를 추가하는 것이 약간 더 복잡 할 수 있습니다. 좋은 예를 찾을 수 있습니다 여기에 하나의 부가 적 줄거리의 년 Colorbar에 대한2 줄거리 1 년 Colorbar 여기 .


1
plt.colorbar()명령으로 색상에 대한 범례를 얻을 수 있습니다 .
drevicko

여기서 코드가 변경된 것으로 보입니다 .cmap = cm.colormap_name은 이제 cmap = cm.cmapname이어야합니다.
크리스

@ cmarti1138 나는 당신이 무슨 뜻인지 모르겠어요, cm.colormap_name그리고 cm.cmapname실제적인 변수 matplotlib.cm; 그것은 단지에 대한 의사의 cm.jet또는 cm.veridis_r등,
wflynny

이미 플로팅 된 곡선 의 cmap또는 c목록 을 변경하는 방법이 있습니까?
Guimoute 2019

10

위의 wflynny의 답변에 추가하려면 여기 에서 사용 가능한 컬러 맵을 찾을 수 있습니다.

예:

import matplotlib.cm as cm
plt.scatter(x, y, c=t, cmap=cm.jet)

또는 대안으로

plt.scatter(x, y, c=t, cmap='jet')

3

서브 플롯 컬러 바

분산 형 서브 플롯의 경우 보조 그림의 도움으로 "맵핑 가능"을 만든 다음 원래 플롯에 추가하여 축에 컬러 바를 속일 수 있습니다.

위의 예에서 계속 :

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(10)
y = x
t = x
fig, (ax1, ax2) = plt.subplots(1, 2)
ax1.scatter(x, y, c=t, cmap='viridis')
ax2.scatter(x, y, c=t, cmap='viridis_r')


# Build your secondary mirror axes:
fig2, (ax3, ax4) = plt.subplots(1, 2)

# Build maps that parallel the color-coded data
# NOTE 1: imshow requires a 2-D array as input
# NOTE 2: You must use the same cmap tag as above for it match
map1 = ax3.imshow(np.stack([t, t]),cmap='viridis')
map2 = ax4.imshow(np.stack([t, t]),cmap='viridis_r')

# Add your maps onto your original figure/axes
fig.colorbar(map1, ax=ax1)
fig.colorbar(map2, ax=ax2)
plt.show()

COLORBAR로 서브 플롯 분산

무시할 수있는 보조 그림도 출력됩니다.

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