2011-10-26 21 views
5

Tôi đang cố gắng tạo bản đồ nhiệt trên một tệp hình dạng trong python. Tôi cần phải thực hiện một vài trong số này vì vậy không muốn đọc trong .shp mọi lúc.Lớp phủ một đườngBộ sưu tập trên một ô trong matplotlib - cách làm cho hai đường thẳng lên.

Thay vào đó, tôi nghĩ rằng tôi có thể tạo một thể hiện lineCollection của ranh giới bản đồ và phủ lên hai hình ảnh. Vấn đề là - tôi dường như không thể làm cho hai người xếp hàng chính xác.

Đây là mã, trong đó linecol là đối tượng lineCollection.

fig = plt.figure() 
ax = fig.add_subplot(111) 
ax.contourf(xi,yi,zi) 
ax.add_collection(linecol, autolim = False) 
plt.show() 

Có cách nào dễ dàng để sửa các giới hạn của linecol để khớp với giới hạn của lô khác không? Tôi đã có một vở kịch với set_xlim và transforms.Bbox, nhưng dường như không thể quản lý nó.

Cảm ơn bạn rất nhiều vì đã giúp đỡ!

Trả lời

1

Biến đổi phức tạp vì các hệ thống tọa độ khác nhau có liên quan. Xem http://matplotlib.sourceforge.net/users/transforms_tutorial.html.

Tôi đã quản lý tỷ lệ LineCollection với kích thước thích hợp như thế này. Điều quan trọng là nhận ra rằng tôi cần thêm + ax.transData vào biến đổi mới mà tôi đã đặt trên LineCollection. (Khi bạn không đặt bất kỳ chuyển đổi vào một đối tượng nghệ sĩ, ax.transData là mặc định Nó chuyển đổi dữ liệu tọa độ vào tọa độ hiển thị..)

from matplotlib import cm 
import matplotlib.pyplot as plt 
import matplotlib.collections as mc 
import matplotlib.transforms as tx 
import numpy as np 

fig = plt.figure() 

# Heat map spans 1 x 1. 
ax = fig.add_subplot(111) 
xs = ys = np.arange(0, 1.01, 0.01) 
zs = np.random.random((101,101)) 
ax.contourf(xs, ys, zs, cmap=cm.autumn) 

lines = mc.LineCollection([[(5,1), (9,5), (5,9), (1,5), (5,1)]]) 
# Shape spans 10 x 10. Resize it to 1 x 1 before applying the transform from 
# data coords to display coords. 
trans = tx.Affine2D().scale(0.1) + ax.transData 
lines.set_transform(trans) 
ax.add_collection(lines) 

plt.show() 

(Output đây:. http://i.stack.imgur.com/hDNN8.png Không đủ uy tín để gửi inline) enter image description here

Sẽ dễ dàng sửa đổi điều này nếu bạn cần hình dạng được dịch hoặc thu nhỏ không đồng đều trên x và y.

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