Matplotlib 산점도; 세 번째 변수의 함수로서의 색상


152

세 번째 변수에 따라 점이 음영 처리되는 산점도 (matplotlib 사용)를 만들고 싶습니다. 나는 이것과 매우 가깝습니다.

plt.scatter(w, M, c=p, marker='s')

여기서 w와 M은 데이터 포인트이고 p는 음영 처리하려는 변수입니다.
그러나 나는 색상보다는 그레이 스케일로하고 싶습니다. 누구든지 도울 수 있습니까?

답변:


156

색상을 수동으로 설정할 필요가 없습니다. 대신 그레이 스케일 컬러 맵을 지정하십시오.

import numpy as np
import matplotlib.pyplot as plt

# Generate data...
x = np.random.random(10)
y = np.random.random(10)

# Plot...
plt.scatter(x, y, c=y, s=500)
plt.gray()

plt.show()

여기에 이미지 설명을 입력하십시오

또는 더 넓은 범위의cmap 컬러 맵을 원한다면 kwarg를로 지정할 수도 있습니다 scatter. 이들 중 어느 버전의 역 버전을 사용하려면 " _r"버전을 지정하십시오 . 예 gray_r대신 gray. 만든 사전 여러 가지 그레이 스케일 색상 맵 (예를 들면있다 gray, gist_yarg, binary, 등).

import matplotlib.pyplot as plt
import numpy as np

# Generate data...
x = np.random.random(10)
y = np.random.random(10)

plt.scatter(x, y, c=y, s=500, cmap='gray')
plt.show()

1
감사! 어쨌든 일정량의 총 중량을 포함하는이 점들 주위에 윤곽선을 그릴 수 있습니까?
토마스 콜렛

6
mpl.cm로 직접 사용할 수도 있습니다 plt.cm.
heltonbiker

@Thomas 콜릿 : 당신이 윤곽을 그리려는 경우 데이터가 다음, 2 차원 매트릭스로 포인트를 형성하여 플롯 보간해야 할 것이다 plt.contour()또는 plt.contourf()-하지만 다른 질문

범례에 라벨을 어떻게 추가 할 수 있습니까? 연속 숫자가있는 경우 컬러 바를 사용하는 것 같습니다. 불연속 값의 경우는 어떻습니까? 예를 들어, 세 가지 범주의 범례에 레이블 3 개를 추가 할 수 있습니까?
Nate

26

matplotlib에서 회색은 0-1 사이의 숫자 값 문자열로 제공 될 수 있습니다.
예를 들어c = '0.1'

그런 다음이 범위 내의 값으로 세 번째 변수를 변환하고이를 사용하여 점을 채색 할 수 있습니다.
다음 예제에서는 포인트의 y 위치를 색상을 결정하는 값으로 사용했습니다.

from matplotlib import pyplot as plt

x = [1, 2, 3, 4, 5, 6, 7, 8, 9]
y = [125, 32, 54, 253, 67, 87, 233, 56, 67]

color = [str(item/255.) for item in y]

plt.scatter(x, y, s=500, c=color)

plt.show()

여기에 이미지 설명을 입력하십시오


3
레코드의 경우 c네 번째 열에 알파 값을 갖는 (n, 4) 모양의 배열을 인수 로 제공하면 ALPHA를 컬러 맵으로 적용 할 수 있습니다 . 을 사용하여 세 번째 변수가 Z 인 경우 매우 좋은 효과 shape=(n,1)colors = numpy.hstack((numpy.zeros_like(z), numpy.zeros_like(z), numpy.ones_like(z), z/z.max()))제공합니다 (물론 조정할 수 있음).
heltonbiker

오류가 발생합니다 : 'RGBA 시퀀스의 길이가 중 3 또는 4해야한다'
MattCochrane

1
@MattClimbs 예제에서와 같이 plt.scatter 대신 plt.plot을 호출한다고 생각합니다.
smashbro

이 플롯에 컬러 바를 어떻게 추가합니까?
FaCoffee

2
@FaCoffee plt.colorbar()는 그렇게 할 것입니다
Mathew Savage

10

때때로 x 값 대소 문자를 기준으로 색상을 정확하게 플롯 해야 할 수도 있습니다 . 예를 들어, 3 가지 유형의 변수와 일부 데이터 요소가있는 데이터 프레임이있을 수 있습니다. 그리고 당신은 다음과 같이하고 싶습니다.

  • RED의 물리적 변수 'A'에 해당하는 점을 플롯합니다.
  • BLUE의 물리적 변수 'B'에 해당하는 점을 플롯합니다.
  • 녹색의 물리적 변수 'C'에 해당하는 점을 플롯합니다.

이 경우 x 값을 해당 색상 이름에 목록으로 매핑 한 다음 해당 목록을 plt.scatter명령 에 전달하기 위해 짧은 기능을 작성해야 할 수도 있습니다 .

x=['A','B','B','C','A','B']
y=[15,30,25,18,22,13]

# Function to map the colors as a list from the input list of x variables
def pltcolor(lst):
    cols=[]
    for l in lst:
        if l=='A':
            cols.append('red')
        elif l=='B':
            cols.append('blue')
        else:
            cols.append('green')
    return cols
# Create the colors list using the function above
cols=pltcolor(x)

plt.scatter(x=x,y=y,s=500,c=cols) #Pass on the list created by the function here
plt.grid(True)
plt.show()

x 변수의 함수 인 채색 산포도


이 플롯에 대한 컬러 바를 만드는 방법은 무엇입니까?
Maryam Rahmani Moghaddam
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.