Python Графики гистограмм по дням и месяцам, но не по неделям - PullRequest
0 голосов
/ 17 марта 2020

Я следую примеру, найденному здесь: https://plot.ly/python/aggregations/#histogram -биннинг

Код, который у них работает, работает, как и ожидалось, но я пытаюсь расширить его до автобина по неделям, а также день, месяц и т. д. c. Я знаю, что этот набор данных не имеет времени, но я также хотел бы собрать свой собственный набор данных, который также имеет время, используя час. Кажется, что это было бы просто, но этот код не дает правильных результатов:

import plotly.io as pio

import pandas as pd

df = pd.read_csv("https://plot.ly/~public.health/17.csv")

data = [dict(
  x = df['date'],
  autobinx = False,
  autobiny = True,
  marker = dict(color = 'rgb(68, 68, 68)'),
  name = 'date',
  type = 'histogram',
  xbins = dict(
    end = '2016-12-31 12:00',
    size = 'M1',
    start = '1983-12-31 12:00'
  )
)]

layout = dict(
  paper_bgcolor = 'rgb(240, 240, 240)',
  plot_bgcolor = 'rgb(240, 240, 240)',
  title = '<b>Shooting Incidents</b>',
  xaxis = dict(
    title = '',
    type = 'date'
  ),
  yaxis = dict(
    title = 'Shootings Incidents',
    type = 'linear'
  ),
  updatemenus = [dict(
        x = 0.1,
        y = 1.15,
        xref = 'paper',
        yref = 'paper',
        yanchor = 'top',
        active = 1,
        showactive = True,
        buttons = [
        dict(
            args = ['xbins.size', 'D1'],
            label = 'Day',
            method = 'restyle',
        ), dict(
            args = ['xbins.size', 'D7'],
            label = 'Week',
            method = 'restyle',
        ), dict(
            args = ['xbins.size', 'M1'],
            label = 'Month',
            method = 'restyle',
        ), dict(
            args = ['xbins.size', 'M3'],
            label = 'Quater',
            method = 'restyle',
        ), dict(
            args = ['xbins.size', 'M6'],
            label = 'Half Year',
            method = 'restyle',
        ), dict(
            args = ['xbins.size', 'M12'],
            label = 'Year',
            method = 'restyle',
        )]
  )]
)

fig_dict = dict(data=data, layout=layout)

pio.show(fig_dict, validate=False)

Кто-нибудь знает, как заставить работать корзины по неделям (а также гипотетические корзины по часам)? Спасибо!

1 Ответ

0 голосов
/ 19 марта 2020

Я понял, как сделать то, что я пытался сделать. Ответ был похоронен в документах Plot.ly, найденных здесь: https://plot.ly/python/reference/

В частности, под xbins.size, они относятся к той же схеме в axis.dtick. Вот документация axis.dtick, на которую был дан ответ:

dtick Родитель: data [type = histogram] .marker.colorbar Тип: число или строка категориальных координат

Устанавливает промежуточный шаг галочки на этой оси. Используйте с tick0. Должно быть положительным числом или специальными строками, доступными для осей «log» и «date». Если ось type имеет значение «log», то тики устанавливаются каждые 10 ^ (n «dtick), где n - номер тика. Например, для установки отметки в 1, 10, 100, 1000, ... установите dtick на 1. Чтобы установить метки на 1, 100, 10000, ... установите dtick на 2. Чтобы установить метки на 1, 5, 25, 125, 625, 3125, ... установите dtick на log_10 (5 ) или 0,69897000433. «log» имеет несколько специальных значений; «L», где f - положительное число, задает тики, линейно расположенные по значению (но не по положению). Например, tick0 = 0,1, dtick = «L0,5» будет ставить отметки в 0,1, 0,6, 1,1, 1,6 и т. Д. c. Чтобы показать степени 10 плюс маленькие цифры между ними, используйте «D1» (все цифры) или «D2» (только 2 и 5). tick0 игнорируется для «D1» и «D2». Если ось type является «датой», то вы должны преобразовать время в миллисекунды. Например, чтобы установить интервал между тиками в один день, установите dtick в 86400000.0. "date" также имеет специальные значения "M" дает тики, разделенные числом месяцев. n должно быть положительным целым числом. Чтобы установить тики 15-го числа каждого третьего месяца, установите tick0 до "2000-01-15" и dtick до "M3". Для установки тиков каждые 4 года установите dtick на «M48»

. В результате новый фрагмент кода для определения размера корзины будет:

        buttons = [
        dict(
            args = ['xbins.size', ' 3600000.0'],
            label = 'Hour',
            method = 'restyle',
        ), dict(
            args = ['xbins.size', '86400000.0'],
            label = 'Day',
            method = 'restyle',
        ), dict(
            args = ['xbins.size', ' 604800000.0'],
            label = 'Week',
            method = 'restyle',
        ), dict(
            args = ['xbins.size', 'M1'],
            label = 'Month',
            method = 'restyle',
        )]

Но с Имея это в виду, я бы заподозрил, что использование «D1» также не сработало бы. Если кто-то, кто работает в Plot.ly, увидит это, не могли бы вы сделать заметку, чтобы обновить пример, чтобы указать на этот специфический c нюанс?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...