Jak poprawić umieszczanie etykiet na wykresie rozproszenia matplotlib (kod, algorytm, wskazówki)?
Używam matplotlib do wykreślania wykresu punktowego:
I oznacz bańkę za pomocą przezroczystego pudełka zgodnie z napiwkiemmatplotlib: jak automatycznie dodawać adnotacje do punktu na rozproszeniu?
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)
a wynikowy wątek:
Jednak nadal istnieje możliwość poprawy, aby zmniejszyć nakładanie się (na przykład przesunięcie pola etykiety jest ustalone na (-10,3)). Czy istnieją algorytmy, które mogą:
dynamicznie zmieniaj przesunięcie pola etykiety zgodnie z zatłoczeniem jego otoczeniadynamicznie umieść pole etykiety zdalnie i dodaj linię strzałki między ramką bąbelkową a etykietąnieco zmienić orientację etykietynakładająca się bańka label_box jest lepsza niż nakładająca się etykieta label_box?Chcę tylko, aby wykres był łatwy dla ludzkich oczu, więc niektóre nakładanie się jest OK, nie tak sztywne, jak ograniczeniehttp://en.wikipedia.org/wiki/Automatic_label_placement wskazuje. A ilość pęcherzyków na wykresie jest mniejsza niż 150 przez większość czasu.
Znajduję tzwForce-based label placement
http://bl.ocks.org/MoritzStefaner/1377729 jest dość interesujący. Nie wiem, czy jest dostępny jakiś kod / pakiet Pythona do zaimplementowania algorytmu.
Nie jestem facetem akademickim i nie szukam optymalnego rozwiązania, a moje kody Pythona muszą oznaczyć wiele wielu wykresów, więc szybkość / pamięć jest w zakresie rozważań.
Szukam szybkiego i skutecznego rozwiązania. Wszelka pomoc (kod, algorytm, wskazówki, przemyślenia) na ten temat? Dzięki.