Прохладный! Артефакт визуализации Plotly играет с круговыми диаграммами

искусственный интеллект визуализация данных

Прохладный! Артефакт визуализации Plotly играет с круговыми диаграммами

Были опубликованы две предыдущие статьи на графике:

Самой большой особенностью рисования Plotly является небольшой объем кода, красивая графика и динамическая визуализация.Серия рисунков Plotly будет сериализована в будущем.

библиотека импорта

Используемый здесь среда:

  • Python3.7.5
  • jupyter notebook
  • plotly4.11.0
  • plotly-express0.4.1
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

Существует два основных способа построения круговых диаграмм:

  1. plotly_express: px.pie
  2. plotly.graph_objects: go.Pie

Реализовать круговую диаграмму на основе Plotly_express

Круговая диаграмма по умолчанию

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

fruit = pd.DataFrame({
    "name":["苹果","香蕉","梨","菠萝","葡萄"],
    "number":[1000,800,600,2000,2500]})

fruit

fig = px.pie(fruit,names="name",values="number")
fig.show()

По умолчанию отображаетсяПроцент и название категории справа

добавить заголовок

fig = px.pie(fruit,
             names="name",
             values="number",
             title="水果数量占比"  # 添加标题
            )
fig.show()

⚠️:Заголовок по умолчанию находится в правом верхнем углу., иногда мы хотимКак центрировать заголовокШерстяная ткань?

fig = px.pie(fruit,
             names="name",
             values="number"
            )

fig.update_layout(
    title={   # 设置整个标题的名称和位置
        "text":"水果数量占比",
        "y":0.96,  # y轴数值
        "x":0.5,  # x轴数值
        "xanchor":"center",  # x、y轴相对位置
        "yanchor":"top"  
    }
)

fig.show()

Изменить цвет круговой диаграммы

Создав круговую диаграмму выше, мы увидели цвет Plotly_express по умолчанию, давайте изменим цвет круговой диаграммы:

1. Измените цвет через параметр color:

fig = px.pie(fruit,
             names="name",
             values="number",
             color="number"
            )
fig.show()

2. Установить параметром color_discrete_sequence:

fig = px.pie(fruit,
             names="name",
             values="number",
             # 不同颜色:RdBu、Peach
             color_discrete_sequence=px.colors.sequential.RdBu  # 只需要改变最后的RdBu即可
            )
fig.show()

На круговой диаграмме выше показаны 3 разных цвета.

3. Установите цвет по словарной форме:

fig = px.pie(fruit,
             names="name",
             values="number",
             color="name",
             color_discrete_map={   # 字典形式设置颜色
                 '葡萄':'lightcyan',
                 '菠萝':'cyan',
                 '苹果':'royablue',
                 '香蕉':'darkblue',
                 '梨':'red'}
            )
fig.show()

Настройки текстовых сообщений

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

1. Круговая диаграмма по умолчанию отображает проценты, измените отображаемые данные:

fig = px.pie(fruit,names="name",values="number")

fig.update_traces(
    textposition='inside',   # 文本显示位置:['inside', 'outside', 'auto', 'none']
    textinfo='percent+label'
)

fig.show()

Круговая диаграмма вышеОтображает названия различных фруктов: имя + процент

fig = px.pie(fruit,names="name",values="number")

fig.update_traces(
    textposition='inside',
    textinfo='percent+value'
)

fig.show()

На приведенной выше круговой диаграмме показано:значение + процент

2. Измените положение отображаемых данных.По умолчанию находится в веерообразной области, и ее можно настроить для отображения снаружи:

fig = px.pie(fruit,names="name",values="number")

fig.update_traces(
    textposition='outside',  # 显示在外面
    textinfo='label+value'  # 标签名+数据
)

fig.show()

3. Скрытие текста

Например, круговая диаграмма, нарисованная на основе данных, поставляемых с Plotly:

df = px.data.gapminder().query("year == 2007").query("continent == 'Europe'")

# 将满足条件的全部改为Other countries
df.loc[df["pop"] < 2.e6, "country"] = "Other countries"  

fig = px.pie(df, 
             names="country",
             values="pop", 
             title="Population of Eurpean contient")
fig.show()

Некоторые данные, процент которых слишком мал, мы хотим скрыть от отображения:

fig = px.pie(gap, values='pop', names='country')

fig.update_traces(textposition='inside') # 文本显示位置:['inside', 'outside', 'auto', 'none']

fig.update_layout(uniformtext_minsize=15,  # 文本信息最小值
                  uniformtext_mode='hide'  # 3种模式:[False, 'hide', 'show']

                 )
fig.show()

для uniformtext_mode установлено значение False:

4.Направление отображения текстовой информации

Существует 3 направления отображения текстовой информации:horizontal、radial、tangential, по умолчанию горизонтальноhorizontalпоказывать

# 默认效果是水平

fig = px.pie(fruit,names="name",values="number")

fig.update_traces(
    textposition='inside',   # 'inside','outside','auto','none'
    textinfo='percent+label',
    insidetextorientation='radial'   # horizontal、radial、tangential
)

fig.show()

Кольцевая диаграмма

Кольцевая диаграмма получается путем выдолбления середины с использованием отверстия параметра:

fig = px.pie(fruit,
             names="name",
             values="number",
             hole=0.3,   # 设置中间空心圆的比例:0-1之间
             title="水果数量占比"
            )
fig.show()

Реализация на базе go.Pie

Создание базовой круговой диаграммы

import plotly.graph_objects as go

name=fruit["name"].tolist()
value=fruit["number"].tolist()  

fig = go.Figure(
    data=[go.Pie(
        labels=name,
        values=value)
         ]
)

fig.show()

Персонализируйте настройки границ

import plotly.graph_objects as go

name=fruit["name"].tolist()
value=fruit["number"].tolist()  
colors = ['gold', 'mediumturquoise', 'darkorange', 'lightgreen', 'cyan']

# 绘图
fig = go.Figure(
    data=[go.Pie(
        labels=name,
        values=value)
         ]
)

# 更新traces
fig.update_traces(
    hoverinfo='label+percent',
    textinfo='value',
    textfont_size=20,
    marker=dict(colors=colors, 
                line=dict(color='#000000',
                          width=2)))

fig.show()

Настройки ориентации текста

import plotly.graph_objects as go

labels = ['Oxygen','Hydrogen','Carbon_Dioxide','Nitrogen']
values = [4500, 2500, 1053, 500]

fig = go.Figure(data=[go.Pie(
    labels=labels, 
    values=values, 
    textinfo='label+percent',
    insidetextorientation='radial'
)])  #  同样也是3种朝向

fig.show()

пончик

import plotly.graph_objects as go

labels = ['Oxygen','Hydrogen','Carbon_Dioxide','Nitrogen']
values = [3000, 1500, 1000, 2500]

fig = go.Figure(data=[go.Pie(
    labels=labels, 
    values=values, 
    hole=.4)])

fig.show()

секторный отряд

import plotly.graph_objects as go

labels = ['Oxygen','Hydrogen','Carbon_Dioxide','Nitrogen']
values = [3000, 1000, 4000, 2500]

fig = go.Figure(data=[go.Pie(
    labels=labels, 
    values=values, 
    pull=[0.3,0.1,0,0]  # 设置脱离参数
)])

fig.show()

Составление многокруговых диаграмм

Это пример с официального сайта, объясняющий, как настроить круговую диаграмму.

from plotly.subplots import make_subplots

labels = ["US", "China", "European Union", "Russian Federation", "Brazil", "India",
          "Rest of World"]

# 制作子图:'domain' 表示饼图
fig = make_subplots(
    rows=1, 
    cols=2, 
    specs=[[{'type':'domain'}, 
            {'type':'domain'}]])

# 添加两个子图
fig.add_trace(go.Pie(
    labels=labels, 
    values=[16, 15, 12, 6, 5, 4, 42],
    name="GHG Emissions"),
              row=1, 
              col=1)

fig.add_trace(go.Pie(
    labels=labels, 
    values=[27, 11, 25, 8, 1, 3, 25], 
    name="CO2 Emissions"),
              1, 2)   # 参数row和col可以省略

# 使用hole参数制作一个中空的甜甜圈
fig.update_traces(hole=.4, hoverinfo="label+percent+name")

fig.update_layout(
    title_text="Global Emissions 1990-2011",  # 图形的名字
    # 给甜甜圈添加注解
    annotations=[dict(text='GHG', x=0.15, y=0.5, font_size=20, showarrow=True),
                 dict(text='CO2', x=0.82, y=0.5, font_size=15, showarrow=False)])

fig.show()

import plotly.graph_objects as go
from plotly.subplots import make_subplots

# 通过rgb设置不同区块的颜色
night_colors = ['rgb(200, 75, 126)', 'rgb(18, 36, 37)', 'rgb(134, 53, 101)',
                'rgb(136, 55, 57)', 'rgb(206, 4, 4)']
sunflowers_colors =  ['rgb(200, 75, 126)', 'rgb(18, 36, 37)', 'rgb(134, 53, 101)',
                'rgb(136, 55, 57)', 'rgb(206, 4, 4)']
irises_colors =  ['rgb(200, 75, 126)', 'rgb(18, 36, 37)', 'rgb(134, 53, 101)',
                'rgb(136, 55, 57)', 'rgb(206, 4, 4)']
cafe_colors =   ['rgb(200, 75, 126)', 'rgb(18, 36, 37)', 'rgb(134, 53, 101)',
                'rgb(136, 55, 57)', 'rgb(206, 4, 4)']

# 设置子图个数和类型spec
specs = [[{'type':'domain'},   # 类型全部为饼图domain
          {'type':'domain'}], 
         
         [{'type':'domain'}, 
          {'type':'domain'}]]

fig = make_subplots(rows=2, cols=2, specs=specs)  # 2行2列

# 添加4个饼图

labels = ['1st', '2nd', '3rd', '4th', '5th']

fig.add_trace(go.Pie(labels=labels, 
                     values=[38, 27, 18, 10, 7], 
                     name='Pie one',
                     marker_colors=night_colors), 1, 1)

fig.add_trace(go.Pie(labels=labels, 
                     values=[28, 26, 21, 15, 10], 
                     name='Pie two',
                     marker_colors=sunflowers_colors
                    ), 1, 2)

fig.add_trace(go.Pie(labels=labels, 
                     values=[8, 19, 16, 14, 13], 
                     name='Pie three',
                     marker_colors=irises_colors), 2, 1)

fig.add_trace(go.Pie(labels=labels, 
                     values=[31, 24, 19, 18, 8], 
                     name='Pie four',
                     marker_colors=cafe_colors), 2, 2)

# 
fig.update_traces(hoverinfo='label+percent+name', textinfo='value')  # ['label', 'text', 'value', 'percent']

fig.update(layout_title_text='plotly绘制4个子饼图',  #  设置标题
           layout_showlegend=True)   # 是否显示右侧图例

fig = go.Figure(fig)
fig.show()

Карта восходящего солнца

Диаграмма солнечных лучей представляет соотношение размеров между уровнями данных:

1. Базовая карта солнечных лучей

import plotly.express as px
data = dict(
    # 设置每个元素及父级元素(个数相同,注意最里层的空集)
    character=["Eve", "Cain", "Seth", "Enos", "Noam", "Abel", "Awan", "Enoch", "Azura"],
    parent=["", "Eve", "Eve", "Seth", "Seth", "Eve", "Eve", "Awan", "Eve" ],
    value=[10, 14, 12, 10, 4, 6, 2, 4, 3])

fig =px.sunburst(
    data,
    names='character',
    parents='parent',
    values='value',
)
fig.show()

2. График солнечных лучей на основе длинной таблицы DataFrame

fig = px.sunburst(tips,
                  path=['day','time','sex'],  # 最里层是day,中间是time,最外层是sex
                  values='total_bill'
                 )
fig.show()

2. Изменить цвет солнечных лучей

df = px.data.tips()

fig = px.sunburst(
  df, 
  path=['time', 'sex', 'day'],
  values='total_bill', 
  color='day')    # 设置color参数

fig.show()

3. Изменено параметром color_continuous_scale

# 设置旭日图颜色

fig = px.sunburst(
    tips,
    path=['day','time','sex'],  # 最里层是day,中间是time,最外层是sex
    values='total_bill',
    color='total_bill',
    hover_data=['total_bill'],
    color_continuous_scale='RdBu',
#     color_continuous_midpoint=np.average(tips["total_bill"] * 1.5)
                 )
fig.show()

памятка параметра

Параметры на основе plotly.express.pie

plotly.express.pie(
  data_frame=None,  # 绘图数据
  names=None,   # 每个扇形区域名字
  values=None,  # 数值大小
  color=None,   # 颜色
  color_discrete_sequence=None,   # 颜色连续型设置
  color_discrete_map=None,  # 通过字典类型设置
  hover_name=None,   # 悬停显示的名称和数据
  hover_data=None, 
  custom_data=None, 
  labels=None, #  带字符串键和字符串值的dict,默认为{}。此参数用于修改图表中显示的列名称
  title=None, # 标题
  template=None, # 字符串或Plotly.py模板对象,有三个内置的 Plotly 主题:plotly, plotly_white 和 plotly_dark
  width=None, # 长、宽、透明度
  height=None, 
  opacity=None, 
  hole=None) # 中空比例

Юэр Коттедж, уютный коттедж. Хозяин хижины, стремится выжить одной рукой кода, а одной рукой наслаждается жизнью, добро пожаловать в гости?