파이썬 matplotlib에서 (x, y) 좌표 목록 플로팅


110

파이썬에서 실제 xy 좌표로 (a, b)플롯하고 싶은 쌍 목록이 matplotlib있습니다. 현재 목록의 인덱스가 x 좌표를 제공하고 첫 번째 플롯의 y 값이 a쌍 의 s이고 두 번째 플롯의 y 값이 b쌍 의 s 인 두 개의 플롯 을 만들고 있습니다.

명확히하기 위해 내 데이터는 다음과 같습니다. 잘못된 li = [(a,b), (c,d), ... , (t, u)] 호출을 plt.plot()한 줄로 작성하고 싶습니다 . 한 줄짜리가 필요하지 않다면 간단하게 할 수 있습니다.

xs = [x[0] for x in li]
ys = [x[1] for x in li]
plt.plot(xs, ys)

이 쌍을 xy 좌표로 플로팅하기 위해 matplotlib를 어떻게 얻을 수 있습니까?

답변:


180

이 예 :

import numpy as np
import matplotlib.pyplot as plt

N = 50
x = np.random.rand(N)
y = np.random.rand(N)

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

다음을 생성합니다.

여기에 이미지 설명 입력

쌍에서 목록으로 데이터를 압축 해제하려면 다음을 사용하십시오 zip.

x, y = zip(*li)

그래서 한 줄짜리 :

plt.scatter(*zip(*li))

7
2 열 NumPy와 배열의 경우, plt.scatter( * xy.T )단기 및 대한 불명료 : 작동x, y = xy.T; plt.scatter( x, y )
데니스

2
x, y = zip(*li)정말 우아한 파이썬 코드입니다! 나는 (원래의 질문처럼) 각 라인에 목록 압축과 코드의 더 똑바로 앞으로 두 줄을 해왔
트레버 보이드 스미스

1
무작위 plt.scatter예제가 질문과 어떤 관련이 있는지 혼란 스럽습니다 .
jamesdlin

36

numpy 배열이 있으면 다음을 수행 할 수 있습니다.

import numpy as np
from matplotlib import pyplot as plt

data = np.array([
    [1, 2],
    [2, 3],
    [3, 6],
])
x, y = data.T
plt.scatter(x,y)
plt.show()

1
그래서이 방법이 없습니다 np.arraydata=np.array([[x1,y1],[x2,y2],etc.])및 사용 plt.plot(data). 나는 항상 배열의 배열 대신 두 개의 배열을 제공해야합니까?
Max Coplan 2018

1
@MaxCoplan, 맞지만 plt.plot(*data.T)위와 동일하지만 중간 단계를 건너 뛰는 것을 사용할 수 있습니다 .
Zweedeend

7

목록의 모든 점을 연결하는 단일 선을 플로팅하려는 경우

plt . plot ( li [ : ] )

plt . show ( )

이것은 목록의 시작부터 끝까지 데카르트 평면의 점으로 목록의 모든 쌍을 연결하는 선을 그립니다. 이것이 당신이 원했던 것이기를 바랍니다.


3
그는 한 줄을 그리는 것을 원하지 않았고 "한 줄짜리"(한 줄의 코드)로 그리는 것을 원했습니다. 그가 찾고 있던 (그리고 3 년 전에 얻은) 대답은를 사용하는 것이 었습니다 scatter().
Dartmouth

8
이 답변은 "목록의 모든 포인트를 연결하는 단일 선을 그리려는 경우"와 같이 작동하는 조건을 나타 내기 때문에 실제로 투표 할 가치가 있습니까?
Gathide
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.