TGViewer
Визуализируй это! Визуализируй это! @visualize_it · 2.81K subscribers
Post #118 2.66K
​​Как расставить лейблы на графике

Пару недель назад я занималась интересной задачей. У меня был график с несколькими линиями и эффектом наведения мышки. Нужно было придумать простой алгоритм размещения лейблов текущих значений так, чтобы они не перекрывали друг друга.

🔗 https://codepen.io/gnykka/pen/ExqJrKY

Я сделала обычный линейный график на D3, поместив поверх всего контейнеры для ховер-элементов (лейблов и точек на линиях) и прямоугольник, который ловит события мыши. Для лейблов я использую foreignObject – он наконец-то более-менее поддерживается в разных браузерах, включая Safari (главное – не забыть явно указать его размеры и добавлять элементы с префиксом xhtml).

После отрисовки лейблов я вызываю специальную функцию для их размещения. Если кратко, то я прохожу по всем лейблам и сдвигаю их, если они накладываются на предыдущие. Если в результате сдвигов они выходят за пределы графика, то корректирую их положение обратно.

Получился очень простой алгоритм. Он эффективно работает если линий немного, а высота графика достаточная и точно вмещает все лейблы.
  • ❤ 17
  • 🔥 8
More from @visualize_it
  1. Sep 9, 2026Как инструменты влияют на наше визуальное мышление Я давно занимаюсь визуализациями и слеж…
  2. Aug 4, 2026​​Замки мира Нашла очень классную карту для любителей путешествий и истории. https://theca…
  3. Jun 22, 2026Карты Маршалловых островов Месяц назад в основной экспозиции Лувра в Абу-Даби увидела один…
  4. Apr 18, 2026​​Как можно сделать перепись населения интересной Мне всегда было интересно, как визуализа…
  5. Apr 9, 2026Я вылезла за лимит символов одного сообщения, поэтому оставшиеся две библиотеки отдельно.…
  6. Apr 9, 2026Какие бывают библиотеки для визуализации данных Я сейчас пишу статью о сравнении подходов…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →