2016-09-30 21 views
8

Bất kỳ ý tưởng nào về cách chèn thanh tỷ lệ vào bản đồ trong matplotlib cho biết thang đo chiều dài? một cái gì đó giống như cái tôi đã đính kèm.Làm cách nào để chèn thanh tỷ lệ vào bản đồ trong matplotlib

Hoặc có thể bất kỳ ý tưởng nào về cách đo và hiển thị khoảng cách tự động (không vẽ mũi tên và viết khoảng cách theo cách thủ công!)?

Cảm ơn :) enter image description here

+0

Xem câu hỏi này cũng như: [? Có cách nào thuận tiện để thêm một chỉ số quy mô lớn để một âm mưu trong matplotlib] (https://stackoverflow.com/questions/43258638/is-there-a-thuận tiện-cách-to-add-a-tỷ lệ-chỉ số-to-a-lô-trong-matplotlib) – ImportanceOfBeingErnest

Trả lời

4

tôi sẽ cố gắng gói matplotlib-scalebar. (Ví dụ: ví dụ của bạn c)

Giả sử bạn đang vẽ một hình ảnh bản đồ với imshow hoặc tương tự và bạn biết chiều rộng/kích thước pixel (kích thước tương đương với một pixel trên hình ảnh bản đồ thực) , bạn có thể tự động tạo thanh tỷ lệ:

Ví dụ này là thẳng ra khỏi PyPi matplotlib-scalebar package page nhưng ở đây nó là cho đầy đủ:

import matplotlib.pyplot as plt 
import matplotlib.cbook as cbook 
from matplotlib_scalebar.scalebar import ScaleBar 

plt.figure() 
image = plt.imread(cbook.get_sample_data('grace_hopper.png')) 
plt.imshow(image) 
scalebar = ScaleBar(0.2) # 1 pixel = 0.2 meter 
plt.gca().add_artist(scalebar) 
plt.show() 

enter image description here

4

có một một đã cũ isting lớp cho scalebars trong matplotlib gọi là AnchoredSizeBar. Trong ví dụ dưới đây, AnchoredSizeBar được sử dụng để thêm một thanh tỷ lệ vào một hình ảnh (hoặc ánh xạ trên một vùng ngẫu nhiên 100x100 mét).

import numpy as np 
import matplotlib.pyplot as plt 
from mpl_toolkits.axes_grid1.anchored_artists import AnchoredSizeBar 
import matplotlib.font_manager as fm 
fontprops = fm.FontProperties(size=18) 
fig, ax = plt.subplots() 
ax.imshow(np.random.random((10,10)),extent=[0,100,0,100]) 

Độ dài xác định hình ảnh tối đa và tối của giá trị ngang và dọc.

scalebar = AnchoredSizeBar(ax.transData, 
          20, '20 m', 'lower center', 
          pad=0.1, 
          color='white', 
          frameon=False, 
          size_vertical=1, 
          fontproperties=fontprops) 

ax.add_artist(scalebar) 

Bốn đối số đầu tiên cho AnchoredSizeBar là đối tượng chuyển đổi của hệ tọa độ, chiều dài thanh rộng, nhãn và vị trí. Các đối số tùy chọn khác sẽ thay đổi bố cục. Chúng được giải thích tốt trong docstring.

ax.set_yticks([]) 
ax.set_xticks([]) 

Điều này cho phép Scalebar on an image/a map over a 100x100 meter area of random

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