Полностью иллюстрированный

Есть отличная цитата Патрика Уинстона, которая гласит:

Ваш успех в жизни во многом будет определяться вашей способностью говорить, вашей способностью писать и качеством ваших идей, именно в таком порядке».

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

В этой статье я обобщаю некоторые из основных идей, которые я приобрел за эти годы о том, как улучшить свои навыки визуализации данных. В целом они делятся на две категории: то, что мы всегда должны делать, и то, как лучше доносить идеи. Как и в большинстве своих статей, я стараюсь дать вам как можно больше практических советов. К концу этой статьи у вас должно быть несколько новых трюков в рукаве и несколько новых ресурсов для вдохновения.

# 1 Объясни все

Наиболее важным аспектом хорошего сюжета является самодостаточность. Он должен указывать, что он показывает (заголовок), что представляют его оси (метки осей), используемые единицы измерения, диапазон значений, который он охватывает, и какие серии он имеет. Другими словами, ваш участок должен быть в состоянии стоять сам по себе без необходимости в чем-либо еще. Единственным запасным вариантом должен быть заголовок сюжета.

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

Быстрый контрольный список: у вашего графика есть заголовок, каждая ось имеет метку, числовые диапазоны четкие, есть сетка (или намек на нее), а серии правильно названы. Любое другое дополнение также должно быть понятным. Например, если вы хотите построить логарифмический график, убедитесь, что он легко заметен.

Вот сюжет, который мог быть лучше:

Главная проблема здесь не в самом сюжете, а в том количестве информации, которое не получило в нем объяснения. Обратите внимание, сколько информации нужно было поместить в заголовок, чтобы заполнить все пробелы. Например, цветовая шкала могла бы указать, что затенение коррелирует с плотностью выборки.

Из того же произведения здесь гораздо лучший сюжет. На оси X показаны три настройки (свободное падение, броуновская и гравитационная), каждая с тремя поднастройками (только SAP, только KD и KD + SAP) и три серии (Single, SSE и AVX). Ось Y представляет время, и можно видеть, что она построена логарифмически из-за нашего знакомства со степенями десяти.

Пройдите лишнюю милю. Вишенкой на торте являются цифры в верхней части каждой полосы. Большинству людей трудно понять численный смысл логарифмических графиков. Мы можем одновременно передавать экспоненциальное ускорение, представляя интуитивно понятное представление результатов, показывая фактические числа. Часто бывает сложно показать числа за каждой точкой данных, не создавая визуального загрязнения. Тем не менее, когда вы можете, пожалуйста, сделайте это. Особенно при работе с такими вещами, как логарифмические шкалы.

# 2 Структурируйте свои данные

Визуально каждый график должен указывать все и быть достаточно полным, чтобы зрители могли понять представленные числовые значения. Это означает, что есть некий намек на сетку и четкую рамку вокруг данных. Всегда напоминайте себе, что графики — это визуальные таблицы, а не изображения. Вы бы не размыли стол, не так ли? Не делайте цифры трудноразличимыми.

Начнем с плохого примера:

Все, что мы знаем здесь, это то, что у нас есть куча кривых. Некоторые выходят за пределы 100, а сюжет заканчивается на 32 тысячах объектов. Мы можем сравнивать серии друг с другом, но у нас нет реального числового смысла во всем этом — если только вы не возьмете линейку и карандаш, чтобы набросать какие-то эталонные значения. Теперь рассмотрим следующее:

На этот раз нам не нужна линейка, чтобы увидеть, как черная кривая заканчивается на ‹ 20, зеленая заканчивается почти на 40 и т. д. Добавленная маркировка и тонкая сетка имеют большое значение. Из этой визуализации можно составить относительно точную таблицу без линейки или какого-либо другого приспособления.

Не останавливайтесь на достигнутом: добавление рамок и стрелок к графику может быть довольно эффективным. Идея состоит в том, чтобы направить вашего зрителя к тому, что важно. Эти дополнения могут быть значительными, когда визуализация сложная или зашумленная. Вот пример:

# 3 Используйте несколько инструментов

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

Лучший подход — экспортировать данные в другое приложение. Большинство сюжетов, которыми я больше всего горжусь, были сделаны с помощью нескольких инструментов и небольшого количества редактирования изображений. Например, гораздо проще добавлять стрелки и прямоугольники с помощью PowerPoint или Slides, чем в библиотеках для построения графиков или в Excel. Вы также можете примерить цвета с помощью бесплатных инструментов, таких как Paint.Net и его фильтров, таких как оттенок-насыщенность и яркость-контраст.

Приложите дополнительные усилия:большинство графических пакетов экспортируются в SVG. Таким образом, вы можете легко изменить что-либо с помощью инструментов Inkscape и Adobe Illustrator, использующих этот формат. Кроме того, SVG — это формат файла на основе XML, поэтому вы можете открыть его в VS Code и выполнять такие действия, как массовое изменение цвета, с помощью инструментов поиска и замены.

Совет по LaTeX.LaTeX не поддерживает SVG. Однако вы можете преобразовать файлы SVG в формат PDF и включить их в качестве изображений для визуализации векторного качества.

# 4 Используйте согласованные весы

Прежде чем я продолжу, взгляните на эти три графика. Они показывают эволюцию двух процессов. Чем ниже идет кривая, тем лучше. В рамках этой настройки, что из следующего дало наилучшие результаты?

Если вы сказали среднюю синюю кривую, вы…. неправильно?

Загвоздка в том, что это все одни и те же кривые. Что меняется от графика к графику, так это масштаб по оси Y. Один идет от 0 до 1, второй от 0,085 до 1,285 и третий от 0 до 0,5. В каком-то смысле это просто разные зумы одних и тех же кривых. Ниже показано, как они выглядят, когда мы устанавливаем одинаковый диапазон для всех трех графиков:

Если вы сравниваете несколько подходов к одной и той же проблеме с помощью нескольких графиков, всегда убедитесь, что они используют одинаковые масштабы просмотра. Более того, используйте разумные масштабы. Например, если ваши данные представлены в процентах, придерживайтесь диапазона от 0 до 100. Если переменная может принимать значения только от 1 до 2, используйте ее.

В этом контексте злоумышленники любят использовать эту «незначительную ошибку», чтобы намеренно изменить наше восприятие данных. Например, рассмотрим три графика ниже. Слева у нас исходные данные; в центральном положении у нас есть тщательно подобранный масштаб, чтобы синяя кривая выглядела так, как будто она на удивление лучше, чем оранжевая кривая; справа диапазон осей создает впечатление, что оба подхода сходятся к одним и тем же значениям. Никогда не делайте этого.

Вот еще один пример того, как можно использовать весы, чтобы намеренно ввести людей в заблуждение. Фиктивная компания выросла на 1,1%, затем на 1,2% и 1,5% на следующем графике. Темпы роста относительно скромные, но визуализация создает впечатление, что компания растет в геометрической прогрессии — даже стрелка есть!

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

# 5 Следуйте предустановленной цветовой схеме

Если вы не дизайнер или не обладаете прекрасным чувством эстетики, придерживайтесь проверенных цветовых схем. У нас вряд ли есть причины не делать этого — и это экономит время. В Документации Matplotlib есть отличная статья об их цветных картах и ​​их идее. Пользователи Excel могут просто скопировать эти цвета вручную.

Вот краткий обзор некоторых доступных пресетов:

Доступные цветовые карты аккуратно сгруппированы в последовательные, расходящиеся, циклические, количественные и прочие. Кроме того, они обеспечивают перцептивно однородные схемы, которые отлично подходят для рассмотрения того, как ваши графики будут выглядеть при печати в оттенках серого.

Из категории «разное» заслуживают внимания два. Во-первых, cubehelix — отличная схема. Во-вторых, Jet — это цветовая схема, которую мы ассоциируем с пламенем и ночным видением — она работает почти всегда.

Пройдите лишнюю милю.Если вы чувствуете, что вам нужен свой собственный соус, вы всегда можете получить некоторые из этих цветовых карт в Paint.net или Photoshop и поиграть со значениями оттенка и насыщенности, чтобы развить новые идеи. Затем вам нужно скопировать цвета или написать изменения напрямую. Вот два примера игры с оттенками и насыщенностью цветовых карт Jet и Cube Helix:

# 6 Используйте семантику везде, где это возможно

Представьте себе сравнение США, Бразилии и Канады. Какой цвет вы бы использовали? Что бы вы выбрали, если бы это были Facebook, Twitter, Youtube и Instagram? Мы естественным образом ассоциируем страны с их флагами, а бренды — с их логотипами. Эта ассоциация может подразумевать определенный выбор. Например, рассмотрим следующее:

У нас есть США в зеленом, Бразилия в красном и Канада в синем слева. Это совершенно произвольно. Справа я переназначил США на голубой, Бразилию на зеленый и Канаду на красный. Если вы знакомы с этими странами, вы будете ассоциировать эти цвета с соответствующими флагами. Это явное использование семантики. Вы можете сказать, что синий цвет здесь светлее, чем тот, что используется на флаге США, но это лучше, чем окрашивание его в зеленый цвет (или Бразилия в красный цвет).

Кстати, по графику видно, что ВВП США около 20… 20 сколько? Миллиарды? Триллионы? Вы можете знать ответ, но не все знают. Кроме того, что означает ВВП? Это преднамеренный пример плохих ярлыков (проверьте совет № 1). В заголовке должно быть указано «Валовой внутренний продукт (ВВП)», а на оси — «Триллионы долларов».

В качестве второго примера, вот проблематичное изложение результатов президентских выборов в США 2020 года:

Ни одно СМИ никогда не рисует демократическую и республиканскую партии в других оттенках, кроме синего и красного (достаточно посмотреть первоначальную версию). Вся идея здесь состоит в том, чтобы использовать уже существующие отношения зрителей с тем, что мы собираемся представить, чтобы они могли интуитивно понимать данные.

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

# 7 Подчеркните отношения

Рассмотрим приведенный выше сюжет еще раз. В некоторых сериях используется открытый маркер (например, незакрашенный квадрат), в то время как в других используются закрытые маркеры (например, заполненный квадрат). Это удобный способ показать, что решения связаны. Например, две серии DBVT имеют общий квадратный маркер, один открытый, а другой закрытый. То же самое касается BF/SAP и Grid BF/SAP.

Есть много тонких способов показать отношения. Например, тщательное назначение маркеров может творить чудеса. Кроме того, есть и другие инструменты, которые мы можем использовать, такие как стиль линии и оттенок заливки. Например, если бы у нас были решения Parallel DBVT F и Parallel DBVT D, мы могли бы использовать пунктирные линии для последовательных подходов и сплошные линии для параллельных. Точно так же мы могли бы добавить P к параллельным аналогам.

Вот несколько идей о том, как связать серии с использованием пользовательских маркеров:

Первый вариант позволяет нам представить две переменные (заполненные/незаполненные и последовательные/параллельные). Вторая строка может представлять базовый подход, оптимизацию A, оптимизацию B и A + B. Третья строка может демонстрировать повышенные уровни некоторых свойств, таких как агрессивность оптимизации. Наконец, в четвертом ряду используются буквы, что позволяет использовать более 4 вариантов.

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

# 8 Помните о оттенках серого

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

Рассмотрим следующий график в градациях серого:

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

Пройдите лишнюю милю. В более экстремальных случаях вы также можете принудительно сделать все черным, чтобы сымитировать неисправный принтер. Вот приведенный выше график полностью черным. Мы больше не можем полностью отличить DBVT F от AxisSweep или CGAL от KD-Tree, но мы все еще можем понять, что происходит. Вы можете воспроизвести это, используя функцию Color Curves в Paint.Net или поэкспериментировав с контрастом.

# 9 Галереи как источник вдохновения

В большинстве случаев то, что вы хотите построить, — это не простой набор 2D-данных, который можно было бы легко разместить на диаграмме рассеяния. Вместо этого это многомерная или иерархическая проблема без четкой визуализации. В таких случаях лучше всего просматривать галереи для вдохновения.

Три моих основных источника вдохновения:

Идея здесь состоит в том, чтобы взглянуть на каждый образец и подумать: Как, вероятно, выглядели бы мои данные, если бы я построил их таким образом? В качестве альтернативы, показывает ли этот график количество измерений, которые мне нужны? Например, это может отображать несколько переменных в сжатом пространстве, в то время как матрица графика может быть отличным способом визуализировать несколько измерений одновременно. Из Plotly есть несколько классных визуализаций, таких как Роза ветров и Тернарные графики.

Вам может быть интересно, почему информационный бюллетень Papers with Code работает здесь. Если вы проверите это прямо сейчас, то увидите, что, наряду с рекомендациями по чтению, они выбирают наиболее информативные диаграммы и сюжеты из представленных ими работ. Если вы спросите меня, это золотая жила для вдохновения визуализации. Будьте моим гостем и прогуляйтесь по последним нескольким выпускам.

Пройдите лишнюю милю. В каком-то смысле похожие работы — это своего рода галерея. Например, скажем, вы пишете научную статью о новой архитектуре классификации, не зная, что и как построить. К вашему спасению, есть много статей по этой теме, из которых вы можете черпать вдохновение. Это мудрое вложение - сохранить изображение каждого невероятного сюжета, который вы видите, для дальнейшего использования. Вот отличное место для начала.

Это пока все. Не стесняйтесь комментировать или связаться со мной, если у вас есть какие-либо вопросы по этой статье или если вы хотите, чтобы я прокомментировал любую вашу визуализацию. Вы также можете подписаться, чтобы получать уведомления всякий раз, когда я публикую здесь. Стараюсь еженедельно публиковать.

Если вы новичок в Medium, настоятельно рекомендую подписаться. Средние статьи — идеальная пара для StackOverflow для профессионалов в области данных и ИТ, а также для новичков. Пожалуйста, рассмотрите возможность использования моей партнерской ссылки при регистрации или купите мне чашку кофе :)

Спасибо за прочтение :)