Артефакт визуализации Plotly играет с гистограммами

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

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

Артефакт визуализации Plotly играет с histogram_12

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

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

  • На основе plotly_express
  • На основе plotly.graph_objects

Сюжетный сериал

Статьи Plotly образуют последовательную серию. Первые 11 статей о визуализации Plotly:

Эффект гистограммы

Цитируя определение гистограммы из энциклопедии Baidu:

Гистограмма, также известная как карта массового распределения, представляет собой график статистического отчета, который представляет распределение данных в виде серии вертикальных полос или отрезков линий различной высоты. Как правило, горизонтальная ось представляет тип данных, а вертикальная ось — распределение.

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

Данные моделирования

Рисование графиков в этой статье в основном основано на советах набора данных о потреблении, который поставляется с Plotly, Основные поля включают в себя:

  • Общая сумма потребления: total_bill
  • совет: совет
  • Пол плательщика: пол
  • Курит ли плательщик: курильщик
  • дата: день
  • Время приема пищи: время, обед или ужин
  • Количество человек, обедающих: размер
import plotly.express as px
import numpy as np
import plotly.graph_objects as go

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

На основе реализации plotly_express

базовая гистограмма

fig = px.histogram(tips, x="total_bill")
fig.show()

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

fig = px.histogram(
    tips, 
    x="tip",
    title='设置直方图元素',   # 标题
    labels={'tip':'小费'},   # x轴label设置
    opacity=0.8,  # 图形透明度
    log_y=True,  # 取值的对数 
    color_discrete_sequence=['firebrick'] # 颜色选择
    )

fig.show()

Используйте категориальное значение поля в качестве оси X

В приведенном выше примере мы видим, что все данные на оси X являются числовыми.На самом деле, мы также можем использовать различные категории в качестве метки метки оси X:

fig = px.histogram(  # 直方图中自动统计出现的个数
    tips, 
    x="day")

fig.show()

Пользовательские ячейки для номеров блоков

fig = px.histogram(
    tips, 
    x="total_bill", 
    nbins=20)  # 对应字段的个数自定义块的个数

fig.show()

Выбор метода графической нормализации

Для каждой гистограммы существует несколько различных методов нормализации:

'percent', 'probability', 'density', 'probability density'
fig = px.histogram(
   tips, 
   x="total_bill", 
   histnorm='percent'  # 选择标准化方式
)

fig.show()

сгруппированная гистограмма

Гистограммы группируются и рисуются по разным значениям поля, поле дня имеет 4 разных значения:

fig = px.histogram(
    tips, 
    x="total_bill", 
    color="day")  # day属性有4种取值

fig.show()

fig = px.histogram(
    tips, 
    x="tip", 
    color="sex")  # sex属性有2种取值

fig.show()

Использование различных агрегатных функций

Функция агрегирования по умолчанию, используемая в гистограмме, — это счетчик, можно использовать и другие функции агрегирования.

fig = px.histogram(
    tips,
    x="tip",  # 进行分块
    y="total_bill", 
    histfunc='avg')  # 均值

fig.show()

Визуализируйте распределение гистограммы

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

fig = px.histogram(
    tips, 
    x="tip", 
    color="sex",  # 颜色分组
    marginal="rug", # 可供选择:`rug`、`box`, `violin`
    hover_data=tips.columns
)

fig.show()

Реализация на основе go.Histogram

базовая графика

x = tips["total_bill"].tolist()

# 等价于 px.histogram(tips, x="total_bill")
# 直接传入x的值
fig = go.Figure(data=[go.Histogram(x=x)])  

fig.show()

Графическая стандартизация

График нормализуется так же, как и при использовании plotly_express:

import plotly.graph_objects as go
import numpy as np

x = np.random.randn(1000)
fig = go.Figure(data=[go.Histogram(
    x=x, 
    histnorm='probability density'  # 标准化方式选择 'percent', 'probability', 'density', 'probability density'
)])

fig.show()

Горизонтальная гистограмма

Используйте входящие данные как значение оси Y, чтобы нарисовать горизонтальную гистограмму:

import plotly.graph_objects as go
import numpy as np

y = np.random.randn(1000)  # 生成1000个正态分布的随机数

fig = go.Figure(data=[go.Histogram(
    y=y,  # 变成y的取值 
    histnorm='probability density'  # 标准化方式选择 'percent', 'probability', 'density', 'probability density'
)])

fig.show()

Наложение режима наложения для нескольких гистограмм

import plotly.graph_objects as go

import numpy as np

x0 = np.random.randn(300)
x1 = np.random.randn(300) + 1.5
x2 = np.random.randn(300) - 1.5


fig = go.Figure()
fig.add_trace(go.Histogram(x=x0))
fig.add_trace(go.Histogram(x=x1))
fig.add_trace(go.Histogram(x=x2))

# 设置覆盖模式
fig.update_layout(barmode='overlay')  # 重要参数
# 设置透明度
fig.update_traces(opacity=0.8)
fig.show()

Стек режимов наложения для нескольких гистограмм

import plotly.graph_objects as go
import numpy as np

# 随机生成3组数据
x0 = np.random.randn(300)
x1 = np.random.randn(300) + 1
x2 = np.random.randn(300) + 1.5


fig = go.Figure()
fig.add_trace(go.Histogram(x=x0))
fig.add_trace(go.Histogram(x=x1))
fig.add_trace(go.Histogram(x=x2))

# 设置堆叠模式
fig.update_layout(barmode='stack')
# 设置透明度
fig.update_traces(opacity=0.8)
fig.show()

указать агрегатную функцию

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

import plotly.graph_objects as go

x = ["小明","小红","小红","小苏", "小明", "小苏"]
y = ["85","100","132","110","95","120"]

fig = go.Figure()
fig.add_trace(go.Histogram(histfunc="count",   # 指定统计个数的聚合函数
                           y=y, x=x, name="统计个数"))
fig.add_trace(go.Histogram(histfunc="sum",   # 指定求和函数
                           y=y, x=x, name="求和"))

fig.show()

image-20210617114011068

Совокупная гистограмма

Включите функцию накопления через параметр cumulative_enabled: по умолчанию указано накопление числа.

x = list(range(101))

fig = go.Figure(data=[go.Histogram(
    x=x,  # x轴数据
    cumulative_enabled=True
)])  # 开启累计功能

fig.show()

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

В следующем примере строятся две гистограммы с использованием данных x0 и x1 на следующем рисунке:

fig = go.Figure()

# 直方图1
fig.add_trace(go.Histogram(
    x=x0,  # x轴数据
    histnorm='percent',  # 标准化方式
    name='直方图1',  # 
    xbins=dict( # x轴起始值和块的大小size
        start=-4.0,  
        end=3.0,
        size=0.5
    ),
    marker_color='#0B89B5',  # 标记颜色
    opacity=0.75  # 透明度
))

# 直方图2
fig.add_trace(go.Histogram(
    x=x1,
    histnorm='percent',
    name='直方图2',
    xbins=dict(
        start=-3.0,
        end=4,
        size=0.5
    ),
    marker_color='#830A73',
    opacity=0.75
))

fig.update_layout(
    title=dict(text='<b>个性化</b>设置直方图', # 标题名称位置;标题中使用HTML标签
               x=0.5,
               y=0.97
              ), 
    xaxis_title=dict(text='取值'), # xy轴label设置
    yaxis_title_text='count', # 默认聚合函数count
    bargap=0.5, # 组间距离
    bargroupgap=0.3 # 组内距离
)

fig.show()