Легенда об артефакте визуализации Plotly

искусственный интеллект визуализация данных
Легенда об артефакте визуализации Plotly

Общественный номер: You Er Hut
Автор: Питер
Редактор: Питер

Всем привет, меня зовут Питер~

Я давно не обновлял статьи, связанные с сюжетом, и наконец-то сделал одну к Национальному дню. Выбранные темы:Поэкспериментируйте с настройками легенды Plotly, также является темой, о которой я всегда хотел написать.Основное содержание статьи:

Адрес официального сайта обучения:сюжет LY.com/Python/Lego…

Сюжетно сериализованные статьи

Статья Plotly теперь обновлена ​​до 16-й статьи, добро пожаловать на чтение. Рекомендуемые статьи:

Импорт библиотек и данных

Основными данными, используемыми в этой статье, являются данные о потреблении:

import pandas as pd
import numpy as np

import plotly_express as px
import plotly.graph_objects as go

# 消费数据

tips = px.data.tips()
tips.head()

количество элементов легенды

В основном легенды, состоящие из отдельных элементов и нескольких элементов.

один элемент

fig = px.scatter(
    tips, # 数据库
    x="total_bill",  # xy轴
    y="tip",
    color="sex"   #  图例是通过颜色区分
)

fig.show()

Легенда, состоящая из нескольких элементов

Когда несколько элементов различаются одновременно, для отображения данных будут созданы разные формы:

fig = px.scatter(
    tips,
    x="total_bill",
    y="tip",
    color="sex",  # 颜色和标记来同时区分
    symbol="smoker"
)

fig.show()

Изменить название легенды

При использовании plotly_express параметр labels в основном используется для изменения имени легенды.

fig = px.scatter(
    tips, 
    x="total_bill", 
    y="tip", 
    color="sex",   # 颜色和标记;symbol主要来控制形状
    symbol="smoker", 
    # 通过labels来改变默认的图例名称
    labels={"sex": "Gender", "smoker": "Smokes"})

fig.show()

Также возможно генерировать графики с несколькими срезами:

fig = px.scatter(
    tips, 
    x="total_bill", 
    y="tip", 
    color="sex", 
    symbol="smoker", 
    facet_col="time",  #  切面图的列元素
    # 改变图例名称
    labels={"sex": "Gender", "smoker": "Smokes"})

fig.show()

Установить порядок легенды

Построение через plotly_express

Установите порядок легенды параметром legend.traceorder

fig = px.bar(
    tips, # 数据框
    x="day", #   xy轴
    y="total_bill", 
    color="smoker",  # 颜色
    barmode="stack",   # 柱状图模式
    facet_col="sex",  # 切面图的列元素
    category_orders={"day": ["Thur", "Fri", "Sat", "Sun"], # 自定义顺序
                     "smoker": ["Yes", "No"],  
                     "sex": ["Male", "Female"]})

fig.update_layout(legend_traceorder="reversed")  # 设置顺序

fig.show()

⚠️ДефолтВот порядок, в котором поля появляются в исходных данных в соответствии с фактической легендой:

fig = px.bar(
    tips, # 数据框
    x="day", #   xy轴
    y="total_bill", 
    color="smoker",  # 颜色
    barmode="stack",   # 柱状图模式
    facet_col="sex",  # 切面图的列元素
)

fig.show()

Построение через plotly.graph_objects

В основном мы задаем порядок через параметр legendrank. Уведомление:Версия plotly должна быть V5.0 и выше.

pip install --upgrade plotly  # 升级版本

Если мы не используем параметр legendrank:

fig = go.Figure()

# 添加4个不同的轨迹数据
fig.add_trace(go.Bar(name="first", x=["a", "b"], y=[21,27]))
fig.add_trace(go.Bar(name="second", x=["a", "b"], y=[32,18]))
fig.add_trace(go.Bar(name="third", x=["a", "b"], y=[11,32]))
fig.add_trace(go.Bar(name="fourth", x=["a", "b"], y=[21,13]))

fig.show()

Порядок, в котором появляется приведенная выше легенда, — это порядок первого, второго, третьего и четвертого, то есть порядок, в котором добавляются данные дорожки.

Ниже мы используем параметр legendrank:

fig = go.Figure()

# 添加4个不同的轨迹数据
fig.add_trace(go.Bar(name="second",  # 2
                     x=["a", "b"], 
                     y=[32,18],
                     legendrank=2))

fig.add_trace(go.Bar(name="third",  # 3
                     x=["a", "b"],
                     y=[11,32],
                     legendrank=3))

fig.add_trace(go.Bar(name="first",  # 1
                     x=["a", "b"], 
                     y=[21,27],
                     legendrank=1))

fig.add_trace(go.Bar(name="fourth",  # 4
                     x=["a", "b"], 
                     y=[21,13],
                     legendrank=4))

fig.show()

Порядок добавления трасс отличается от первого, второго и т.д. На самом деле он все равно отсортирован по параметру legendrank

Показать и скрыть легенду

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

# 隐藏图例

fig = px.scatter(
    tips,
    x="total_bill",
    y="tip",
    color="sex",  
    symbol="smoker"
)

fig.update_layout(showlegend=False)  # 隐藏图例元素

fig.show()

Расположение легенды

Легенда по умолчанию справа, мы можем использовать параметры для изменения положения легенды

# 默认情况:图例在右上角

fig = px.scatter(
    tips,
    x="total_bill",
    y="tip",
    size="tip",
    color="sex",  # 颜色和标记来同时区分
    symbol="smoker"
)

fig.show()

Измените положение легенды, задав параметры:

# 默认情况

fig = px.scatter(
    tips,
    x="total_bill",
    y="tip",
    size="tip",
    color="sex",  # 颜色和标记来同时区分
    symbol="smoker"
)

# 通过位置参数来改变
fig.update_layout(legend=dict(
    yanchor="top",  # y轴顶部
    y=0.99,
    xanchor="left",  # x轴靠左
    x=0.01
))

fig.show()

горизонтализация легенды

По умолчанию легенда отображается вертикально, а горизонтальное отображение достигается ориентацией параметра. Это горизонтальное отображение очень полезно, когда имеется много категорий легенд.

Данные ВВП в графике используются в этом случае:

Легенда по умолчанию отображается вертикально:

df = px.data.gapminder().query("year==2007")  # 选择2007数据

fig = px.scatter(
    df,  # 数据框和x、y轴数据
    x="gdpPercap", 
    y="lifeExp", 
    color="continent",  # 颜色
    size="pop",  # 大小
    size_max=45)  # 最大值

fig.update_layout(legend=dict(
#     orientation="h",  # 控制水平显示
    yanchor="bottom",  # 分别设置xy轴的位置和距离大小
    y=1.02,
    xanchor="right",
    x=1
))

fig.show()

Включим легенду горизонтального отображения:

# 开启水平显示

fig = px.scatter(
    df, 
    x="gdpPercap", 
    y="lifeExp", 
    color="continent",
    size="pop", 
    size_max=45)

fig.update_layout(legend=dict(
    orientation="h",  # 开启水平显示
    yanchor="bottom",
    y=1.02,
    xanchor="right",
    x=1
))

fig.show()

Дисплей персонализации легенды

fig = px.scatter(
    df, 
    x="gdpPercap", 
    y="lifeExp", 
    color="continent",
    size="pop", 
    size_max=45
)


fig.update_layout(
    legend=dict(
        x=.82,  # 设置图例位置
        y=0,
        traceorder="reversed",  
        title_font_family="Times New Roman",  # 图例标题字体
        font=dict(  # 图例字体
            family="Courier",
            size=13,
            color="red"  # 颜色:红色
        ),
        bgcolor="LightSteelBlue",  # 图例背景色
        bordercolor="Black",  # 图例边框颜色和宽度
        borderwidth=2
    )
)

fig.show()

Легенда набора графических объектов

Следующие несколько случаев основаны на plotly.graph_objects для установки легенды:

  • имя легенды

имя легенды

fig = go.Figure()

fig.add_trace(go.Scatter(
    x=[1, 2, 3, 4, 5],
    y=[1, 2, 3, 4, 5],
    name="图1"  # 图例名称
))

fig.add_trace(go.Scatter(
    x=[1, 2, 3, 4, 5],
    y=[5, 4, 3, 2, 1],
    name="图2"  # 图例名称
))

fig.show()

название легенды

fig = go.Figure()

fig.add_trace(go.Scatter(
    x=[1, 2, 3, 4, 5],
    y=[1, 2, 3, 4, 5],
    name="图1"
))

fig.add_trace(go.Scatter(
    x=[1, 2, 3, 4, 5],
    y=[5, 4, 3, 2, 1],
    name="图2"
))

# 重点参数:设置图例标题
fig.update_layout(legend_title_text='图例标题')

fig.show()

Показать или скрыть легенду

import plotly.graph_objects as go

fig = go.Figure()

fig.add_trace(go.Scatter(
    x=list(range(5)),
    y=list(range(5)),
    showlegend=False  # 不显示这个轨迹的图例
))


fig.add_trace(go.Scatter(
    x=list(range(5)),
    y=list(range(5))[::-1],
))

fig.update_layout(showlegend=True) # 整体图例显示 

fig.show()

Установить размер элемента легенды

import plotly.graph_objects as go

fig = go.Figure()

fig.add_trace(go.Scatter(
    x=list(range(5)),
    y=list(range(5)),
    mode='markers+lines',  # 模式的选择
    marker={'size':10}  # 标记大小
))

fig.add_trace(go.Scatter(
    x=list(range(5)),
    y=[5, 4, 3, 2, 1],
    mode='lines+markers',
    marker={'size':50}
))

fig.update_layout(legend= {'itemsizing': 'constant'})  # trace 和constant两种设置

fig.show()

Когда размер элементов постоянный:

Когда значение itemsizing равно trace: