Chciałbym umieścić pół czarny, pół biały okrąg o promieniu R na początku fabuły matplotlib. Jestem świadomy, że istnieje Circle class, ale nie wiem, jak określić, że lewa połowa koła powinna być biała, a prawa połowa powinna być czarna. (Idealne rozwiązanie pozwoliłoby mi określić orientację koła - np. Powinienem móc go obrócić tak, aby na przykład wierzch mógł być biały, a spód czarny).Matplotlib half black and half white circle
Odpowiedz
Najprostszym sposobem jest użycie dwóch Wedge
s. (To nie jest automatycznie przeskalować osie, ale to łatwo dodawać, jeśli chcesz).
Jako szybki przykład:
import matplotlib.pyplot as plt
from matplotlib.patches import Wedge
def main():
fig, ax = plt.subplots()
dual_half_circle((0.5, 0.5), radius=0.3, angle=90, ax=ax)
ax.axis('equal')
plt.show()
def dual_half_circle(center, radius, angle=0, ax=None, colors=('w','k'),
**kwargs):
"""
Add two half circles to the axes *ax* (or the current axes) with the
specified facecolors *colors* rotated at *angle* (in degrees).
"""
if ax is None:
ax = plt.gca()
theta1, theta2 = angle, angle + 180
w1 = Wedge(center, radius, theta1, theta2, fc=colors[0], **kwargs)
w2 = Wedge(center, radius, theta2, theta1, fc=colors[1], **kwargs)
for wedge in [w1, w2]:
ax.add_artist(wedge)
return [w1, w2]
main()
Gdybyś to podoba aby zawsze być u źródła, możesz określić transformację jako ax.transAxes
i wyłączyć obcinanie.
E.g.
import matplotlib.pyplot as plt
from matplotlib.patches import Wedge
def main():
fig, ax = plt.subplots()
dual_half_circle(radius=0.1, angle=90, ax=ax)
ax.axis('equal')
plt.show()
def dual_half_circle(radius, angle=0, ax=None, colors=('w','k'), **kwargs):
"""
Add two half circles to the axes *ax* (or the current axes) at the lower
left corner of the axes with the specified facecolors *colors* rotated at
*angle* (in degrees).
"""
if ax is None:
ax = plt.gca()
kwargs.update(transform=ax.transAxes, clip_on=False)
center = (0, 0)
theta1, theta2 = angle, angle + 180
w1 = Wedge(center, radius, theta1, theta2, fc=colors[0], **kwargs)
w2 = Wedge(center, radius, theta2, theta1, fc=colors[1], **kwargs)
for wedge in [w1, w2]:
ax.add_artist(wedge)
return [w1, w2]
main()
Jednak spowoduje to, że "okrąg" koła będzie zależał od współczynnika kształtu obrysu osi. (Możesz ominąć to na kilka sposobów, ale staje się bardziej skomplikowany. Daj mi znać, jeśli to masz na myśli i pokażę bardziej rozbudowany przykład.) Mogłem też źle zrozumieć, co miałeś na myśli "u źródła ".
Tak. Właśnie tego chcę. Dzięki :) – mgilson
Nie ma problemu! Mam nadzieję, że to pomoże! –
add_artist nie działa dla mnie. Muszę użyć add_patch. Działa to w wersji 1.4.2 i użyłem tego również w wielu wcześniejszych wersjach. –
Możesz użyć wypełnionego w połowie kółka Unicode (U + 25D0), jeśli masz czcionkę z tym symbolem. Dziwnie, nie jest to w STIX (dołączone do matplotlib), ale wiem, że jest w DejaVu Sans, więc użyję go stamtąd.
import matplotlib.pyplot as plt
import matplotlib.font_manager
from numpy import *
path = '/full/path/to/font/DejaVuSans.ttf'
f0 = matplotlib.font_manager.FontProperties()
f0.set_file(path)
plt.figure()
plt.xlim(-1.2,1.2)
plt.ylim(-1.2,1.2)
for angle in arange(0, 2*pi, 2*pi/10):
x, y = cos(angle), sin(angle)
plt.text(x, y, u'\u25D0', fontproperties=f0, rotation=angle*(180/pi), size=30)
plt.show()
To jest miłe, ale nie możesz określić rozmiaru kręgów w jednostkach osi, co właśnie tutaj chcę. – mgilson
- 1. SVG Half Circle: Dlaczego jest obracany?
- 2. matplotlib bar graph black - jak usunąć barowe granice
- 3. Hough circle circle to circular shadow
- 4. svg circle dla angular2
- 5. Make gvim 7.2 background black
- 6. Metro Circle Background Background
- 7. Safari Rendering image background black on load
- 8. Android TabWidget White Space Issue
- 9. Google Chrome Black Screen ... śmierci?
- 10. Python Debugger obsługujący Black Boxing?
- 11. Kamera OnResume Reinit Black Screen
- 12. Jak utworzyć nowy "Circle" datepicker android
- 13. CSS white-space: nowrap poziomego przewijania bug
- 14. white-space: nowrap; i flexbox nie działał w chrome
- 15. Python Sniffing z książki Black Hat Python
- 16. Crop Image as circle in Android
- 17. Jak mogę utworzyć autoodtwarzanie circle jPlayer?
- 18. Bootstrap 4 klasa img-circle nie działa
- 19. Jedność, Save cubemap to one circle image
- 20. Gdzie jest moja <circle>?
- 21. Modyfikowanie drzewa urządzeń dla Beaglebone Black
- 22. RelativeSource and Popup
- 23. Utwórz element siatki obejmujący wszystkie dostępne kolumny
- 24. Nakładka przedstawia poletka w matplotlib
- 25. ArrayList and String [] AND Object []
- 26. C# Jak używać Directory White Spaces do process.arguements?
- 27. Pudełko dookoła tekstu w matplotlib
- 28. Android Bottom White Stripe Podczas wypełniania treści do oglądania stron internetowych
- 29. Narzędzia AWS CLI na Circle CI: configure: unknown command
- 30. Zoomable Circle Packing z automatycznym dopasowywaniem tekstu w D3.js
Powinieneś być w stanie to zrobić z dwóch 'Wedge's, ale mam problemy z dostaniem rzeczy działały prawidłowo ... –
@JoeKington - Uh-oh. Jeśli nie udaje ci się sprawić, że działa, to trochę zniechęca dla mnie ;-) (Widziałem twoją pracę matplotlib na SO ... To jest naprawdę imponujące) – mgilson
Dzięki! Okazuje się, że robiłem coś głupiego. Dwa kliny działają idealnie, jeśli nie dodajesz losowych literówek do rzeczy! –