Предотвращение наложения меток на графике - PullRequest
1 голос
/ 08 июля 2020

Я разрабатываю приложение, которое позволяет пользователю выбирать динамически запрашиваемые данные, которые затем могут использоваться в визуализациях Recharts. Есть определенные крайние случаи, когда форматирование / рендеринг по умолчанию в повторных диаграммах дает ужасный результат. Например, если в компонент <XAxis /> передано много уникальных значений, то созданная диаграмма, вероятно, будет иметь перекрывающийся текст для отметок.

Кажется, нет хорошего рендера " галочки по возможности, не перекрывая « вариант, описанный в документации. Похоже, это единственные варианты:

  1. Визуализировать все тики (очевидно, приводит к слишком большому количеству тиков)
            <XAxis
              dataKey={xAxisField.name}
              name={getXAxisLabel(xAxisField, chartType)}
              tickFormatter={
                getMetaDataType(xAxisField) ===
                "DATE"
                  ? tickEpochFormatter // force numbers to be displayed as 'YYYY-MM-DD'
                  : tickNumberFormatter
              }
              allowDataOverflow={false}
              ticks={xValues.sort()} // gets all of the values
              interval={0} // display all of values, instead of the default 5
              angle={-90} // force text to be 90, reading towards the graph
              textAnchor="end" // rather than setting "dy={50}" or something
            >
Отрисовывать только начало / конец / начало и конец, которые (по-видимому) полностью зависят от ширины текста до поворота.
            <XAxis
              dataKey={xAxisField.name}
              name={getXAxisLabel(xAxisField, chartType)}
              tickFormatter={
                getMetaDataType(xAxisField) ===
                "DATE"
                  ? tickEpochFormatter // force numbers to be displayed as 'YYYY-MM-DD'
                  : tickNumberFormatter
              }
              allowDataOverflow={false}
              ticks={xValues.sort()} // gets all of the values
              interval="preserveStart" // ensure that everything can be read, giving preference to the "left"???
              angle={-90} // force text to be 90, reading towards the graph
              textAnchor="end" // rather than setting "dy={50}" or something
            >
Жестко запрограммировать количество интервалов, чтобы обеспечить максимум? Я не уверен, что это жизнеспособный вариант, так как мне нужно было бы знать, сколько тиков действительно перекрываются. Это кажется грубым подходом.

Возможно ли, чтобы Recharts отображали как можно больше объектов, даже если они повернуты на 90 градусов, а затем выборочно выбирали то, что имеет достаточно места для отображения? Возможно ли динамическое обновление свойства angle в зависимости от длины текста отметок?

Вот список ссылок, ни одна из которых, похоже, не отвечает на эти вопросы:

Recharts Docs

Github Recharts repo

Сообщения StackOverflow

Вот изображение проблемы c рендеринга, которое я хочу очистить:

Все тики отрисованы и перекрываются

Также обратите внимание, что обычно я предпочитаю придерживаться той же библиотеки, которую я использовал, но если другая библиотека лучше подходит для этого варианта использования, я хотел бы рассмотреть возможность переключения!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...