2009-07-17 18 views
20

Tôi đang hiển thị hình ảnh jpg (tôi xoay 90 độ này, nếu điều này có liên quan) và dĩ nhiên các trục hiển thị tọa độ pixel. Tôi muốn chuyển đổi trục sao cho thay vì hiển thị số pixel, nó sẽ hiển thị đơn vị lựa chọn của tôi - có thể là radian, độ, hoặc trong trường hợp của tôi là một phối hợp thiên văn. Tôi biết chuyển đổi từ pixel sang (ví dụ) độ. Dưới đây là một đoạn của những gì mã của tôi trông giống như hiện nay:Làm cách nào để chuyển đổi (hoặc quy mô) giá trị trục và xác định lại tần suất đánh dấu trong matplotlib?

import matplotlib.pyplot as plt 
import Image 
import matplotlib 
thumb = Image.open(self.image) 
thumb = thumb.rotate(90) 
dpi = plt.rcParams['figure.dpi'] 
figsize = thumb.size[0]/dpi, thumb.size[1]/dpi 
fig = plt.figure(figsize=figsize) 
plt.imshow(thumb, origin='lower',aspect='equal') 
plt.show() 

... do đó, sau ngày từ này, tôi có thể lấy mỗi giá trị mà matplotlib sẽ in trên trục, và thay đổi/thay thế bằng một chuỗi đầu ra thay vào đó? Tôi muốn làm điều này cho một định dạng tọa độ cụ thể - ví dụ, thay vì một góc 10,44 (độ), tôi muốn nó đọc 10 26 '24' '(tức là, độ, arcmins, arcsecs)

Cuối cùng về chủ đề này, tôi muốn kiểm soát tần suất đánh dấu, trên cốt truyện. Matplotlib có thể in giá trị trục mỗi 50 pixel, nhưng tôi thực sự muốn mọi giá trị (ví dụ). Có vẻ như tôi muốn xác định một số loại mảng với giá trị pixel và giá trị được chuyển đổi (độ vv) mà tôi muốn được hiển thị, có quyền kiểm soát tần suất lấy mẫu trong phạm vi xmin/xmax phạm vi.

Có chuyên gia matplotlib nào trên Stack Overflow không? Nếu vậy, cảm ơn rất nhiều trước sự giúp đỡ của bạn! Để thực hiện điều này một kinh nghiệm học tập hơn, tôi thực sự đánh giá cao được prodded theo hướng dẫn vv về loại vấn đề matplotlib. Tôi đã thấy mình rất bối rối với các trục, trục, số liệu, nghệ sĩ, v.v.

Chúc mừng,

Dave

Trả lời

31

Dường như bạn đang làm việc với giao diện matplotlib.pyplot, có nghĩa là bạn sẽ có thể để vượt qua hầu hết các giao dịch với các nghệ sĩ, rìu, và những thứ tương tự. Bạn có thể kiểm soát các giá trị và nhãn của dấu ngoặc đánh dấu bằng cách sử dụng lệnh matplotlib.pyplot.xticks, như sau:

tick_locs = [list of locations where you want your tick marks placed] 
tick_lbls = [list of corresponding labels for each of the tick marks] 
plt.xticks(tick_locs, tick_lbls) 

Ví dụ cụ thể của bạn, bạn sẽ phải tính toán những gì các dấu tick có liên quan đến các đơn vị (ví dụ pixel) của cốt truyện ban đầu của bạn (vì bạn đang sử dụng imshow) - bạn nói bạn biết làm thế nào để làm điều này, mặc dù.

Tôi chưa xử lý nhiều hình ảnh, nhưng bạn có thể sử dụng phương pháp vẽ đồ thị khác (ví dụ: pcolor) cho phép bạn cung cấp thông tin xy. Điều đó có thể cung cấp cho bạn một vài tùy chọn khác để chỉ định đơn vị hình ảnh của bạn.

Để biết hướng dẫn, bạn sẽ làm tốt để xem qua matplotlib gallery - tìm nội dung nào đó bạn thích và đọc mã đã tạo. Một trong những người trong văn phòng của chúng tôi gần đây đã mua một cuốn sách trên Python visualization - có thể đáng xem xét.

Cách mà tôi thường nghĩ về tất cả các mảnh khác nhau như sau:

  • Một Figure là một container cho tất cả các Axes
  • Một Axes là không gian nơi những gì bạn vẽ (ví dụ:cốt truyện của bạn) thực sự xuất hiện
  • An Axisxy trục
  • Nghệ sĩ mới nhất? Đó là quá sâu trong giao diện cho tôi: Tôi chưa bao giờ phải lo lắng về những người được nêu ra, mặc dù tôi hiếm khi sử dụng các mô-đun pyplot trong lô sản xuất.
+0

Cảm ơn bạn - công trình này tuyệt vời. Một bình luận thêm nữa. Khi tôi sử dụng plt.xticks, tôi không còn nhận được vị trí x, y nữa (tôi sẽ mong đợi điều này dưới dạng pixel theo bất kỳ khía cạnh nào) của con chuột khi cốt truyện được hiển thị. Bất kỳ ý tưởng tại sao điều này sẽ được? – Dave

+0

Đó * là * lạ - Tôi chưa bao giờ nhận thấy điều này trước đây. Tôi không biết đủ về cửa sổ GUI đó để đưa ra đề xuất - có thể là một câu hỏi hay ở đây hoặc trên danh sách gửi thư matplotlib. –

+0

Một giải pháp tốt hơn để chuyển đổi tọa độ là sử dụng từ khóa 'mức độ 'khi sử dụng imshow. – Phlya

Các vấn đề liên quan