Я использую matplotlib для построения диаграммы рассеяния:
И назовите пузырь, используя прозрачный ящик в соответствии с подсказкой в matplotlib: как комментировать точку на разворачиваемой автоматической стрелке?
Вот код:
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)
и полученный участок:
Но есть еще возможности для улучшения, чтобы уменьшить перекрытие (например, смещение метки метки фиксировано как (-10,3)). Существуют ли алгоритмы, которые могут:
- динамически изменять смещение поля ярлыка в соответствии с переполненностью его окрестности.
- динамически помещать ящик меток удаленно и добавить строку стрелки в пузырь и поле ярлыка
- несколько меняют ориентацию метки
- label_box перекрывает пузырь лучше, чем label_box перекрывает label_box?
Я просто хочу, чтобы диаграмма была легкой для человеческих глаз для компромисса, поэтому некоторое перекрытие в порядке, а не как жесткое ограничение как http://en.wikipedia.org/wiki/Automatic_label_placement предлагает. И количество пузырьков в диаграмме меньше 150 раз.
Я считаю, что так называемый Force-based label placement
http://bl.ocks.org/MoritzStefaner/1377729 довольно интересен. Я не знаю, есть ли какой-либо код/пакет python для реализации алгоритма.
Я не академический парень и не ищу оптимального решения, и мои коды на питоне должны обозначать много графиков, поэтому скорость/память находятся в сфере рассмотрения.
Я ищу быстрое и эффективное решение. Любая помощь (код, алгоритм, советы, мысли) на эту тему? Благодарю.