Создание интерактивных графиков с использованием Plotly.js, часть 5: Графические диаграммы и калибровочные диаграммы
Russian (Pусский) translation by Ilya Nikov (you can also view the original English article)
Если вы начали эту серию с самого начала, вы могли заметить, что Plotly.js использует тот же тип scatter для создания как линейных, так и пузырьковых диаграмм. Единственное отличие состоит в том, что мы должны были установить mode на lines при создании линейных диаграмм и markers при создании пузырьковых.
Точно так же Plotly.js позволяет создавать диаграммы pie, donut и gauge с использованием того же значения для атрибута type и изменения значения других атрибутов в зависимости от диаграммы, которую вы хотите создать.
Создание диаграмм пирога в Plotly.js
Вы можете создать круговые диаграммы в Plotly.js, установив атрибут type в pie. Существуют и другие атрибуты, такие как opacity, visible и name, которые являются общими для других типов диаграмм. Атрибут name используется для предоставления имени текущей трассировки. Это имя показано в легенде для идентификации. Вы можете показать или скрыть трассировку пирога в легенде диаграммы, установив для атрибута showlegend значение true или false соответственно. Вы можете установить имя метки для разных секторов круговой диаграммы, используя атрибут labels.
В случае круговых диаграмм объект-маркер используется для управления появлением разных секторов диаграммы. Атрибут color, вложенный внутри marker, можно использовать для установки цвета каждого сектора круговой диаграммы. Цвет для разных секторов может быть указан как значение массива для атрибута color.
Вы также можете установить цвет и ширину всех строк, охватывающих каждый сектор, используя атрибуты color и width, вложенные внутри объекта линии. У вас также есть возможность сортировать все сектора круговой диаграммы от самых больших до самых маленьких, используя булевский атрибут sort. Аналогично, направление секторов может быть изменено в clockwise или counterclockwise с помощью атрибута direction.
Следующий код создает базовую круговую диаграмму, в которой показана лесная область пяти ведущих стран мира.
1 |
var pieDiv = document.getElementById("pie-chart"); |
2 |
|
3 |
var traceA = { |
4 |
type: "pie", |
5 |
values: [8149300, 4916438, 4776980, 3100950, 2083210], |
6 |
labels: ['Russia', 'Canada', 'Brazil', 'United States', 'China'] |
7 |
};
|
8 |
|
9 |
var data = [traceA]; |
10 |
|
11 |
var layout = { |
12 |
title: "Area Under Forest for Different Countries" |
13 |
};
|
14 |
|
15 |
Plotly.plot(pieDiv, data, layout); |
Как вы можете видеть, мы больше не используем атрибуты x и y для указания точек, которые мы хотим построить. Это делается с помощью values и labels. Проценты определяются автоматически на основе входных значений.
По умолчанию первый кусочек пирога начинается в 12 часов. Вы можете изменить начальный угол диаграммы, используя атрибут rotation, который принимает значение от -360 до 360. Значение по умолчанию 12 часов равно углу 0.
Если вы хотите, чтобы фрагмент в вашей диаграмме выделялся, вы можете использовать атрибут pull, который может принимать либо число, либо массив чисел со значениями от 0 до 1. Атрибут pull используется для вытягивания указанных секторов из пирога. Расстояние вытяжки равно доле большего радиуса пирога или пончика.
Очень легко преобразовать круговую диаграмму в пончиковую диаграмму, указав значение атрибута hole. Он вырезает данную долю радиуса из пирога, чтобы сделать диаграмму пончика.
Вы можете контролировать цвет отдельных секторов в круговой диаграмме, используя атрибут colors, вложенный внутри объекта маркера. Ширина и цвет линии, которая охватывает каждый сектор, также могут быть изменены с помощью атрибутов width и color, вложенных внутри объекта линии. Ширина по умолчанию закрывающей строки равна 0. Это означает, что по умолчанию по секторам не будет рисоваться линия.
Существует также атрибут hovertext, который может использоваться для предоставления некоторой дополнительной текстовой информации для каждого отдельного сектора. Эта информация будет видна для зрителей, когда они нависают над сектором. Одним из условий появления текста является то, что атрибут hoverinfo должен содержать флаг text. Вы можете установить цвет текста, лежащий внутри или вне секторов пирога, используя атрибуты family, size и color, вложенные внутри объектов insidetextfont и outsidetextfont соответственно.
Следующий код использует данные нашей предыдущей круговой диаграммы для создания диаграммы пончиков, в которой используются дополнительные атрибуты, о которых мы только что узнали.
1 |
var pieDiv = document.getElementById("pie-chart"); |
2 |
|
3 |
var traceA = { |
4 |
type: "pie", |
5 |
values: [8149300, 4916438, 4776980, 3100950, 2083210], |
6 |
labels: ['Russia', 'Canada', 'Brazil', 'United States', 'China'], |
7 |
hole: 0.25, |
8 |
pull: [0.1, 0, 0, 0, 0], |
9 |
direction: 'clockwise', |
10 |
marker: { |
11 |
colors: ['#CDDC39', '#673AB7', '#F44336', '#00BCD4', '#607D8B'], |
12 |
line: { |
13 |
color: 'black', |
14 |
width: 3 |
15 |
}
|
16 |
},
|
17 |
textfont: { |
18 |
family: 'Lato', |
19 |
color: 'white', |
20 |
size: 18 |
21 |
},
|
22 |
hoverlabel: { |
23 |
bgcolor: 'black', |
24 |
bordercolor: 'black', |
25 |
font: { |
26 |
family: 'Lato', |
27 |
color: 'white', |
28 |
size: 18 |
29 |
}
|
30 |
}
|
31 |
};
|
32 |
|
33 |
var data = [traceA]; |
34 |
|
35 |
var layout = { |
36 |
title: "Area Under Forest for Different Countries" |
37 |
};
|
38 |
|
39 |
Plotly.plot(pieDiv, data, layout); |
Создание калибровочных диаграмм в Plotly.js
Основная структура калибровочной диаграммы аналогична диаграмме пончиков. Это означает, что мы можем использовать некоторые умные выбранные значения и создавать простые калибровочные диаграммы, сохраняя при этом атрибут type, установленный в pie. В принципе, мы будем скрывать некоторые части полного пирога, чтобы он выглядел как калибровочная диаграмма.
Во-первых, нам нужно выбрать некоторые значения для атрибута values. Чтобы все было просто, я буду использовать верхнюю половину пирога в качестве моей калибровочной диаграммы. Это означает, что значения должны быть разделены поровну между частью, которую я хочу видеть, и частью круговой диаграммы, которую я хочу скрыть. Видимый участок диаграммы можно разделить на более мелкие части. Ниже приведен пример выбора значений для нашей калибровочной диаграммы.
1 |
values: [100 / 5, 100 / 5, 100 / 5, 100 / 5, 100 / 5, 100] |
Число 100 в указанной строке - произвольное. Как вы можете видеть, первые пять срезов вместе составляют до 100, что также является значением, установленным для скрытой области круговой диаграммы. Это разделяет весь пирог в равной степени между скрытой и видимой частью.
Вот полный код, который создает нашу базовую калибровочную диаграмму. Следует отметить, что я установил атрибут цвета сектора, который должен быть скрыт до белого. Аналогично, значения text и labels для соответствующего сектора также были установлены на пустые строки. Атрибут rotation был установлен на 90, так что диаграмма не выводится из позиции по умолчанию 12 часов.
1 |
var gaugeDiv = document.getElementById("gauge-chart"); |
2 |
|
3 |
var traceA = { |
4 |
type: "pie", |
5 |
showlegend: false, |
6 |
hole: 0.4, |
7 |
rotation: 90, |
8 |
values: [100 / 5, 100 / 5, 100 / 5, 100 / 5, 100 / 5, 100], |
9 |
text: ["Very Low", "Low", "Average", "Good", "Excellent", ""], |
10 |
direction: "clockwise", |
11 |
textinfo: "text", |
12 |
textposition: "inside", |
13 |
marker: { |
14 |
colors: ["rgba(255, 0, 0, 0.6)", "rgba(255, 165, 0, 0.6)", "rgba(255, 255, 0, 0.6)", "rgba(144, 238, 144, 0.6)", "rgba(154, 205, 50, 0.6)", "white"] |
15 |
},
|
16 |
labels: ["0-10", "10-50", "50-200", "200-500", "500-2000", ""], |
17 |
hoverinfo: "label" |
18 |
};
|
Следующая часть кода касается иглы калибровочной диаграммы. Значение, заданное для переменной degrees, будет определять угол, на который рисуется стрелка. Переменная radius определяет длину иглы. Атрибуты x0 и y0 используются для установки начальной точки нашей строки. Аналогично, атрибуты x1 и y1 используются для установки конечной точки нашей строки.
Вы можете создавать более сложные фигуры с помощью путей SVG. Все, что вам нужно сделать, - установить атрибут type в path и указать фактический путь с использованием атрибута path. Вы можете узнать больше об этом в разделе макетов.
1 |
var degrees = 115, radius = .6; |
2 |
var radians = degrees * Math.PI / 180; |
3 |
var x = -1 * radius * Math.cos(radians); |
4 |
var y = radius * Math.sin(radians); |
5 |
|
6 |
var layout = { |
7 |
shapes:[{ |
8 |
type: 'line', |
9 |
x0: 0, |
10 |
y0: 0, |
11 |
x1: x, |
12 |
y1: 0.5, |
13 |
line: { |
14 |
color: 'black', |
15 |
width: 8 |
16 |
}
|
17 |
}],
|
18 |
title: 'Number of Printers Sold in a Week', |
19 |
xaxis: {visible: false, range: [-1, 1]}, |
20 |
yaxis: {visible: false, range: [-1, 1]} |
21 |
};
|
22 |
|
23 |
var data = [traceA]; |
24 |
|
25 |
Plotly.plot(gaugeDiv, data, layout, {staticPlot: true}); |
Весь код этого раздела создает следующую калибровочную диаграмму. Прямо сейчас, график не очень причудливый, но он может служить хорошей отправной точкой.
Заключение
В этом уроке вы узнали, как создавать диаграммы пирога и пончика, используя тип трассировки pie в Plotly.js. Вы также научились устанавливать значения нескольких атрибутов для преобразования этих круговых диаграмм в простые калибровочные диаграммы. Вы можете больше узнать о круговых диаграммах и их разных атрибутах на странице справки.
Это был последний учебник нашей интерактивной серии Plotly.js. Первое вводное учебное пособие предоставило вам обзор библиотеки. Во втором, третьем и четвертом учебниках показано, как создавать линейные диаграммы, гистограммы и пузырьковые диаграммы соответственно. Надеюсь, вам понравился этот урок, а также вся серия целиком. Если у вас есть какие-либо вопросы, не стесняйтесь, дайте мне знать в комментариях.



