75

Tôi có một danh sách các cặp (a, b)mà tôi muốn vẽ với matplotlibpython là tọa độ xy thực tế. Hiện tại, nó đang thực hiện hai ô, trong đó chỉ mục của danh sách cho tọa độ x và các giá trị y của ô thứ nhất là as trong các cặp và giá trị y của ô thứ hai là bs trong các cặp.

Để làm rõ, dữ liệu của tôi trông như thế này: li = [(a,b), (c,d), ... , (t, u)] Tôi muốn thực hiện một lớp lót chỉ gọi plt.plot()không chính xác. Nếu tôi không yêu cầu một lớp lót, tôi có thể làm một cách tầm thường:

xs = [x[0] for x in li]
ys = [x[1] for x in li]
plt.plot(xs, ys)
  • Làm cách nào tôi có thể lấy matplotlib để vẽ các cặp này dưới dạng tọa độ xy?

Cảm ơn vì sự giúp đỡ!

|
127

Theo ví dụ này :

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

sẽ sản xuất:

Để giải nén dữ liệu của bạn từ các cặp thành danh sách, hãy sử dụng zip:

x, y = zip(*li)

Vì vậy, một lớp lót:

plt.scatter(*zip(*li))
|
  • 1

    Đối với một mảng numpy 2 cột, plt.scatter( * xy.T )hoạt động: ngắn và tối nghĩa chox, y = xy.T; plt.scatter( x, y )

    – Hoàng Cẩm Nhi 16:43:32 14/07/2016
  • 1

    x, y = zip(*li)là mã trăn thực sự thanh lịch! Tôi đã thực hiện hai dòng mã đơn giản hơn với tính năng nén danh sách trên mỗi dòng (như câu hỏi ban đầu)

    – Đỗ Thái Chi 16:34:19 23/08/2018
24

Nếu bạn có một mảng numpy, bạn có thể làm điều này:

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)
|
  • 1

    Vì vậy, không có cách nào để có một np.arraysố data=np.array([[x1,y1],[x2,y2],etc.])và sử dụng plt.plot(data). Tôi sẽ luôn phải đưa ra hai mảng thay vì mảng của mảng?

    – Lý Thế Uy 16:15:18 03/12/2018
1

Nếu bạn muốn vẽ một dòng duy nhất kết nối tất cả các điểm trong danh sách

plt . plot ( li [ : ] )

plt . show ( )

Điều này sẽ vẽ một đường nối tất cả các cặp trong danh sách dưới dạng các điểm trên mặt phẳng Cartesian từ đầu danh sách đến cuối. Tôi hy vọng rằng đây là những gì bạn muốn.

|
  • 1

    Anh ta không muốn vẽ một dòng duy nhất, anh ta muốn vẽ một "một dòng" (một dòng mã). Câu trả lời anh đang tìm kiếm (và đã nhận được 3 năm trước) là sử dụng scatter().

    – Lý Thế Uy 18:07:21 26/02/2017
  • 1

    Vì câu trả lời này nêu rõ điều kiện mà nó hoạt động, tức là "Nếu bạn muốn vẽ một dòng duy nhất kết nối tất cả các điểm trong danh sách", nó có thực sự xứng đáng để bỏ phiếu không?

    – Phan Huy Cẩn 05:26:21 15/09/2017

Câu trả lời của bạn (> 20 ký tự)

Bằng cách click "Đăng trả lời", bạn đồng ý với Điều khoản dịch vụ, Chính sách bảo mật and Chính sách cookie của chúng tôi.

Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ hoặc hỏi câu hỏi của bạn.