Şu anda Python ve matplotlib ile bir şey uyguluyorum. Çokgenler nasıl çizileceğini ve bunları nasıl dolduracağımı biliyorum, ancak'u çokgenin içine nasıl doldurabilirim? Daha açık olmak gerekirse, axhspan
've axvspan
' lar kullanılarak elde edilen sonucu, kırmızı ve dikdörtgensel kırmızı çizgileri keserek yatay ve dikey kırmızı çizgileri keserek değiştirmek istiyorum (bunun dışında her şey taranır). : Matplotlib ile alanların doldurulması tamamlandı
7
A
cevap
4
This post esasen bu soruyu sorar (ve cevaplar). Kabul edilen cevapta 'Düzenle 2'ye bakın. Çizim poligonunun büyüklüğünü bir vektör poligonunun nasıl oluşturulacağını ve sonra tamamlamayı istediğiniz şekle uyacak şekilde nasıl bir delik oluşturulacağını anlatır. Bu, kalem hareket ettiğinde çizilip çizilmeyeceğini tanımlayan satır kodları atayarak yapar.
import numpy as np
import matplotlib.pyplot as plt
def main():
# Contour some regular (fake) data
grid = np.arange(100).reshape((10,10))
plt.contourf(grid)
# Verticies of the clipping polygon in counter-clockwise order
# (A triange, in this case)
poly_verts = [(2, 2), (5, 2.5), (6, 8), (2, 2)]
mask_outside_polygon(poly_verts)
plt.show()
def mask_outside_polygon(poly_verts, ax=None):
"""
Plots a mask on the specified axis ("ax", defaults to plt.gca()) such that
all areas outside of the polygon specified by "poly_verts" are masked.
"poly_verts" must be a list of tuples of the verticies in the polygon in
counter-clockwise order.
Returns the matplotlib.patches.PathPatch instance plotted on the figure.
"""
import matplotlib.patches as mpatches
import matplotlib.path as mpath
if ax is None:
ax = plt.gca()
# Get current plot limits
xlim = ax.get_xlim()
ylim = ax.get_ylim()
# Verticies of the plot boundaries in clockwise order
bound_verts = [(xlim[0], ylim[0]), (xlim[0], ylim[1]),
(xlim[1], ylim[1]), (xlim[1], ylim[0]),
(xlim[0], ylim[0])]
# A series of codes (1 and 2) to tell matplotlib whether to draw a line or
# move the "pen" (So that there's no connecting line)
bound_codes = [mpath.Path.MOVETO] + (len(bound_verts) - 1) * [mpath.Path.LINETO]
poly_codes = [mpath.Path.MOVETO] + (len(poly_verts) - 1) * [mpath.Path.LINETO]
# Plot the masking patch
path = mpath.Path(bound_verts + poly_verts, bound_codes + poly_codes)
patch = mpatches.PathPatch(path, facecolor='white', edgecolor='none')
patch = ax.add_patch(patch)
# Reset the plot limits to their original extents
ax.set_xlim(xlim)
ax.set_ylim(ylim)
return patch
if __name__ == '__main__':
main()
1
Sadece bir dikdörtgenin tamamlayıcısına ihtiyacınız varsa, bunun yerine 4 dikdörtgen çizebilirsiniz (örnek resminizde görülebilen 4 dikdörtgen gibi). Arsa kenarlarının koordinatları, xlim()
ve ylim()
ile elde edilebilir. Ben Matplotlib bir poligonun dışında çizer gibi sunar emin değilim
...
İlgili konular
- 1. Vim: bir karakterle satırların doldurulması
- 2. Django order_by alanların toplamı
- 3. SQLite'deki alanların benzersiz kombinasyonu?
- 4. Matplotlib
- 5. Matplotlib
- 6. Matplotlib
- 7. matplotlib
- 8. matplotlib
- 9. Ajax, başarı veya hata iletmez, ancak tamamlandı ve tamamlandı
- 10. boş alanların boşluk tüketimi
- 11. JSON çıktısından alanların seçilmesi
- 12. Alanların listesini QuerySet.values ()
- 13. Matplotlib
- 14. Pencerelerde python sekmesi tamamlandı
- 15. Makefiles Turing tamamlandı mı?
- 16. Matplotlib ile scatterplot animasyonlarını kaydetme
- 17. matplotlib çubuk grafiği ile tarihler
- 18. Matplotlib
- 19. Matplotlib
- 20. Güncelleme jQuery değişkeni ajax tamamlandı
- 21. Excel içinde VBA içinde tamamlandı
- 22. matplotlib
- 23. Matplotlib
- 24. Matplotlib
- 25. matplotlib
- 26. Matplotlib
- 27. matplotlib
- 28. Matplotlib
- 29. MatPlotLib
- 30. Scala REPL'in sekmesi tamamlandı mı?
sen başvurmak sonrası 2D piksel görüntü maskeleme hakkındadır: Burada
bu soruya alakalı yukarıda atıfta bulunulan yazının kısmıdır. Bu, soruna yaklaşık bir çözüm olsa da, ideal çözüm vektör çizim (piksel çizimi değil) yoluyla olur. – EOLkabul edilen yanıtın 'Edid 2' bölümüne aşağı inin, bir vektör çözümü bulacaksınız. – Paul
Teşekkürler bpowah! Gerçekten de, 'Edit 2' içinde 'mask_outside_polygon' işlevi, bazı kuluçkalarla birlikte hile yaptı. –