Всем привет, меня зовут Питер~
Сегодня я представляю вам статью о рисовании Plotly:Как использовать Plotly для рисования прямоугольной дендрограммы
Сюжетные статьи
В настоящее время статья Plotly обновлена до 17-й статьи, и рекомендуется несколько статей:
болтовня
Почему Питер продолжает писать о Plotly? Перед Национальным праздником читатель добавил VX Питера:
1. Ваш туториал по Plotly мне очень помог ?
2. Начал кататься на третьем курсе бакалавриата ?
3. Студенты университета, отлично ?
До этого был еще один читатель Plotly, который тоже читал статью Питера:
Так что все вместе усердно учатся, и Питер тоже хорошо пишет, может быть, когда-нибудь вам будет полезно это прочитать~
Что такое древовидная карта
Дерево(древовидная диаграмма) — способ графического выражения структурных свойств иерархической структуры. В основном это выражается в отношениях между отцом и сыном, например: Китай-Гуандун-Шэньчжэнь. Между Китаем и Гуандуном, а также между Гуандуном и Шэньчжэнем есть проявления этой связи.
Ниже приведен график иерархической структуры древовидной диаграммы, найденный в Интернете, который является очень классическим:
Давайте посмотрим на современную и мощную древовидную диаграмму:
Этот график называетсяДревовидная карта подушек, который использует текстуру, чтобы каждый прямоугольник выглядел «приподнятым», как подушка в середине, и сужающимся к краям. Этот визуальный элемент использует то, что люди интерпретируют этот тип затенения как выпуклые поверхности, что позволяет быстрее идентифицировать различные прямоугольники.
Справочные ресурсы:
1. Официальный сайт сюжета:сюжет LY.com/Python/tree…
2. Treemaps - Визуализация данных сложных иерархических структур:Woohoo. Я создаю карты tools.com/tree. Контракты…
библиотека импорта
Древовидный граф, представленный в этой статье, по-прежнему будет рисоваться с использованием методов plotly_express и plotly.graph_objects.Давайте сначала импортируем библиотеку:
import pandas as pd
import numpy as np
import plotly_express as px
import plotly.graph_objects as go
from plotly.subplots import make_subplots # 画子图
Рисунок на основе plotly_express
2.1 Базовая древовидная диаграмма
При рисовании древовидной диаграммы она основывается на списке данных
name = ["中国","福建", "广东","厦门","深圳", "珠海", "湖北", "湖南", "长沙", "陕西","衡阳","咸阳","东莞"]
parent = ["", "中国", "中国","福建", "广东", "广东", "中国", "中国", "湖南", "中国","湖南","陕西","广东"]
fig = px.treemap(
names = name,
parents = parent)
fig.update_traces(root_color="lightgrey")
fig.update_layout(margin = dict(t=50, l=25, r=25, b=25))
fig.show()
2.2 Древовидная карта на основе DataFrame
Вышеуказанные данные в виде нашего пользовательского списка.Как правило, если он в пандах, данные будут в формате DataFrame.Как нарисовать древовидную диаграмму?
Здесь мы используем набор данных о потреблении, который поставляется с графиком:
fig = px.treemap(
df, # 传入数据
path=[px.Constant("all"),"day","sex","time"], # 重点:传递数据路径
values="tip" # 数值显示使用哪个字段
)
fig.update_traces(root_color="lightskyblue")
fig.update_layout(margin=dict(t=30,l=20,r=25,b=30))
fig.show()
Вы также можете установить параметры цвета:
fig = px.treemap(
df,
path=[px.Constant("all"),"day","sex","time"], # 重点:传递数据路径
values="tip",
color="time" # 指定颜色变化的参数
)
fig.update_traces(root_color="lightskyblue")
fig.update_layout(margin=dict(t=30,l=20,r=25,b=30))
fig.show()
2.3 Древовидная карта с непрерывным изменением цвета
Вот набор данных ВВП:
fig = px.treemap(
df1,
path=[px.Constant("world"),"continent","country"], # 路径
values="pop", # 值
color="lifeExp", # 颜色的取值
hover_data=["iso_alpha"], # 悬停数据
color_continuous_scale="RdBu", # 颜色变化的设置
color_continuous_midpoint=np.average(df1["lifeExp"],
weights=df1["pop"])
)
fig.update_layout(margin = dict(t=40, l=15, r=35, b=45))
fig.show()
2.4 Дендрограмма на основе дискретных изменений цвета
Набор данных на основе потребления по-прежнему используется:
Код чертежа следующий:
fig = px.treemap(
df, # 传入数据
path=[px.Constant("all"), 'sex', 'day', 'time'], # 数据路径
values='total_bill', # 采用的值
color='time', # 颜色
color_discrete_map={'(?)':'lightgrey', # 离散型颜色设置
'Lunch':'gold',
'Dinner':'darkblue'})
fig.update_layout(margin = dict(t=50, l=15, r=25, b=35))
fig.show()
3 Рисование на основе go.Treemap
3.1 Базовая древовидная диаграмма
name = ["中国","福建", "广东","厦门","深圳", "珠海", "湖北", "湖南", "长沙", "陕西","衡阳","咸阳","东莞"]
parent = ["", "中国", "中国","福建", "广东", "广东", "中国", "中国", "湖南", "中国","湖南","陕西","广东"]
fig = go.Figure(go.Treemap( # go方法实现
labels = name,
parents = parent,
root_color = "lightgrey"
))
fig.update_layout(margin = dict(t=50, l=25, r=25, b=25))
fig.show()
3.2 Древовидная карта с разными цветами
Несколько способов установить цвет дендрограммы
1. Способ 1
name = ["中国","福建", "广东","厦门","深圳", "珠海", "湖北", "湖南", "长沙", "陕西","衡阳","咸阳","东莞"]
parent = ["", "中国", "中国","福建", "广东", "广东", "中国", "中国", "湖南", "中国","湖南","陕西","广东"]
color = ["pink", "royalblue", "lightgray", "purple", "cyan", "lightgray", "lightblue", "lightgreen"]
fig = go.Figure(go.Treemap(
labels = name,
parents = parent,
marker_colors = color # 方式1:marker_colors参数设置
))
fig.update_layout(margin = dict(t=50, l=25, r=25, b=25))
fig.show()
Способ 2:
name = ["中国","福建", "广东","厦门","深圳", "珠海", "湖北", "湖南", "长沙", "陕西","衡阳","咸阳","东莞"]
parent = ["", "中国", "中国","福建", "广东", "广东", "中国", "中国", "湖南", "中国","湖南","陕西","广东"]
fig = go.Figure(go.Treemap(
labels = name,
parents = parent,
))
fig.update_layout(
margin = dict(t=50, l=25, r=25, b=25),
# 方式2:通过 treemapcolorway 参数设置
treemapcolorway = ["pink","blue","red","lightblue","purple","royalblue"])
fig.show()
Способ 3:
name = ["中国","福建", "广东","厦门","深圳", "珠海", "湖北", "湖南", "长沙", "陕西","衡阳","咸阳","东莞"]
parent = ["", "中国", "中国","福建", "广东", "广东", "中国", "中国", "湖南", "中国","湖南","陕西","广东"]
values = [0,10,20,30,44,55,60,70,88,96,127,150,180]
fig = go.Figure(go.Treemap(
labels = name,
parents = parent,
values = values,
marker_colorscale = 'Blues' # 方式3
))
fig.update_layout(
margin = dict(t=20, l=25, r=25, b=25))
fig.show()
Если мы хотим, чтобы размер всего содержимого метки был одинаковым, мы можем использовать параметр uniformtext для управления им.
Здесь мы используем онлайн-файл CSV:
fig = go.Figure(go.Treemap(
ids = df2.ids,
labels = df2.labels, # 标签
parents = df2.parents, # 父级路径
pathbar_textfont_size = 20, # 路径的字体大小
root_color = "lightblue" # root下的颜色
))
fig.update_layout(uniformtext=dict(minsize=10,mode="hide"),
margin=dict(t=50,l=25,r=25,b=25))
fig.show()