Я разрабатываю график для веб-сайта с помощью Highcharts . Этот график содержит множество кривых вспышек (в основном, кумулятивную заболеваемость с течением времени). Смысл этого конкретного графика в том, чтобы иметь возможность быстро и легко сравнивать несколько кривых с текущей ситуацией чиновника общественного здравоохранения («точечная оценка»).
Каждая кривая имеет оценку (от 0 до 100), которая показывает, насколько она похожа на точечную оценку. Я хочу отобразить кривые с лучшими оценками X и раскрасить их в зависимости от того, насколько хороши их оценки.
Мне сложно определиться с двумя вещами:
Что я пробовал:
Использование ColorBrewer для выбора цветов (чем темнее цвет, тем выше оценка):
Делаем более толстые линии, чтобы указать более высокие баллы:
Однако ни один из этих вариантов не особенно хорош, потому что они не корректируют линии в соответствии со счетом. Вместо этого линии окрашены категорически. Если оценка верхней строки оценки равна 100, а следующая самая высокая строка оценки равна 10, цвета не отличаются на 1/10, если это имеет смысл.
Это привело меня к попытке настроить линии оттенков серого на линейной шкале (например, оценка 100 будет полностью черной (#000000), а оценка 50 будет #808080). Однако на практике линии по-прежнему не так легко различить:
Здесь, несмотря на то, что между лучшей результативной линией и худшей результативной линией разница составляет 19 очков, отличить их практически невозможно. Некоторым помогает изменение толщины линии:
Но потом, если я добавлю слишком много кривых, получится слишком грязно. Вот пример (постоянная толщина линии):
Я, очевидно, нуждаюсь в некотором руководстве. За этой проблемой должна стоять наука. Как мне спроектировать этот график?
Что касается технической реализации этого, любая приличная программа для построения графиков предлагает возможность настроить цветовые оси по своему усмотрению. Насколько я могу судить, Highcharts позволяет это : вы устанавливаете точки на своей цветовой оси с цветами, которые вы определяете, а все остальное линейно интерполируется между этими цветами. Таким образом, вы можете использовать полный цветовой спектр с «точным отображением», как вы это называете.
Что касается выбора цвета, то именно для таких целей существуют десятки цветовых схем, например, взгляните на эту . Я не могу сказать вам, что лучше для вашего приложения, но вот некоторые мысли:
Как раскрасить кривые, чтобы они были визуально различимы и отображали баллы?
Это действительно зависит от ваших данных и того, что важно для зрителей. Центральный вопрос, который вы должны себе задать: легко ли увидеть всю необходимую информацию?
Также рассмотрите возможность выбора диапазонов абсцисс и ординат в отношении важных данных, а не в отношении всех данных. Например, если внешняя линия в вашем последнем примере не очень актуальна или все, что нужно знать зрителю, это то, что она далеко за пределами масштаба, тогда вы должны оставить свою ординату на уровне 250 тыс.
stops
. Смотрите мой ответ для получения дополнительной информации.@Wrzlprmft сделал отличный комментарий, который действительно помог. Хотя его решение не помогло мне достичь цели на 100%, оно поставило меня на правильный путь.
Это веб-приложение представляет собой приложение Django (Python). В результате я решил использовать библиотеку под названием Spectre . Функциональность Spectra идентична Highcharts stops
с расширением linearGradient
. Spectra позволяет мне сделать это:
>>> color_scale = spectra.scale(['red', 'blue']).domain([0, 100])
>>> color = color_scale(39.33)
>>> color.hexcode
'#9b0064'
Это именно то, что мне нужно.
Скотт
Джефф
Джефф
DA01
DA01
Джефф