programing

Python의 산점도 및 색상 매핑

minimums 2023. 7. 27. 21:45
반응형

Python의 산점도 및 색상 매핑

나는 numpy 배열에 저장된 점 x와 y의 범위를 가지고 있습니다.이것들은 x(t)와 y(t)를 나타냅니다. 여기서 t=0... T-1

다음을 사용하여 산점도를 그리는 중입니다.

import matplotlib.pyplot as plt

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

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

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

여기 예가 있습니다.

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].enter image description here

아마도 좀 더 이해하기 쉬운 예는 조금 더 단순한 것일 것입니다.

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()

enter image description here

사용자가 전달하는 배열은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()

enter image description here

색상 막대

다음을 사용하여 색상 막대를 추가할 수 있습니다.

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

enter image description here

그림과 하위 그림을 명시적으로 사용하는 경우(예:fig, ax = plt.subplots()또는ax = fig.add_subplot(111)), 색상 막대를 추가하는 것이 더 중요할 수 있습니다.단일 하위구 색상 막대에 대한 좋은 예와 2개의 하위구 1개의 색상 막대에 대한 좋은 예를 찾을 수 있습니다.

위의 wflynny의 답변을 추가하려면 여기에서 사용 가능한 색상 지도를 찾을 수 있습니다.

예:

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

아니면,

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

하위구 색상표

산포가 있는 하위 그림의 경우 보조 그림을 사용하여 "표시 가능"을 만든 다음 원래 그림에 추가하여 축에 색상 막대를 속일 수 있습니다.

위의 예에 이어서 다음과 같이 설명합니다.

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()

Scatter subplots with COLORBAR

무시할 수 있는 보조 수치도 출력합니다.

여러 하위 플롯을 위한 단일 색상 막대

때로는 여러 하위 플롯에서 시각화된 데이터 값을 나타내는 단일 색상 막대를 사용하는 것이 좋습니다.

이 경우 두 그림의 최소 및 최대 데이터 값을 사용하여 정규화() 개체를 생성해야 합니다.

그런 다음 스칼라 값과 색상 사이에 매핑되는 스칼라 매핑 가능() 개체에서 색상 막대 개체를 만들 수 있습니다.

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(10)
y = x
t1 = x # Colour data for first plot
t2 = 2*x # Color data for second plot
all_data = np.concatenate([t1, t2])

# Create custom Normalise object using the man and max data values across both subplots to ensure colors are consistent on both plots
norm = plt.Normalize(np.min(all_data), np.max(all_data))

fig, axs = plt.subplots(1, 2)
axs[0].scatter(x, y, c=t1, cmap='viridis', norm=norm)
axs[1].scatter(x**2, y, c=t2, cmap='viridis', norm=norm)

# Create the colorbar
smap = plt.cm.ScalarMappable(cmap='viridis', norm=norm)
cbar = fig.colorbar(smap, ax=axs, fraction=0.1, shrink = 0.8)
cbar.ax.tick_params(labelsize=11)
cbar.ax.set_ylabel('T', rotation=0, labelpad = 15, fontdict = {"size":14})
plt.show()

하위 플롯_색 막대

언급URL : https://stackoverflow.com/questions/17682216/scatter-plot-and-color-mapping-in-python

반응형