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.

questionAnswers(3)

yourAnswerToTheQuestion