używam matplotlib wykreślić wykres punktowy:Jak poprawić rozmieszczenie etykiet dla wykresu punktowego matplotlib (kod, algorytm, wskazówki)?
i etykiety bańkę przy użyciu przezroczystego pudełka według końcówki na matplotlib: how to annotate point on a scatter automatically placed arrow?
Oto kod:
if show_annote:
for i in range(len(x)):
annote_text = annotes[i][0][0] # STK_ID
ax.annotate(annote_text, xy=(x[i], y[i]), xytext=(-10,3),
textcoords='offset points', ha='center', va='bottom',
bbox=dict(boxstyle='round,pad=0.2', fc='yellow', alpha=0.2),
fontproperties=ANNOTE_FONT)
i powstała działka:
Jednak wciąż istnieje możliwość wprowadzenia ulepszeń w celu zmniejszenia nakładania się (na przykład przesunięcie pola etykiety jest ustalone jako (-10,3)). Czy istnieją algorytmy, które mogą:
- dynamicznie zmieniać przesunięcie polu Etykieta według crowdedness jego sąsiedztwie
- dynamicznie umieść pole etykiety zdalnie i dodać linię ze strzałką bąbelkowej i etykiet polu
- nieco zmian beween orientacja etykiety
- nakładające się bańki label_box są lepsze niż label_box nachodzące na label_box?
po prostu chcę zrobić wykres łatwo ludzkie oczy comprehand, więc niektóre pokrywają jest w porządku, a nie sztywne ograniczenie jako http://en.wikipedia.org/wiki/Automatic_label_placement sugeruje. A ilość bąbelków na wykresie jest w większości przypadków mniejsza niż 150.
Uważam, że tak zwany Force-based label placement
http://bl.ocks.org/MoritzStefaner/1377729 jest całkiem interesujący. Nie wiem, czy istnieje jakiś kod/pakiet Pythona do wdrożenia algorytmu.
Nie jestem człowiekiem akademickim i nie szukam optymalnego rozwiązania, a moje kody Pythona muszą oznaczać wiele wykresów, więc prędkość/pamięć jest w zakresie rozważań.
Szukam szybkiego i skutecznego rozwiązania. Każda pomoc (kod, algorytm, wskazówki, przemyślenia) na ten temat? Dzięki.
Założę się, że możesz zrobić coś fajnego dzięki networkx i jego układowi graficznemu. – tacaswell