Установить выравнивание для столбчатой ​​диаграммы Plotly по оси x - PullRequest
1 голос
/ 08 мая 2019

Привет, я пытаюсь изменить, где мои бары начинаются и останавливаются на гистограмме. Моя цель - иметь бар, который охватывает весь месяц. сейчас мой код:

    cumulative = go.Bar(y=self.gb[self.y_column],
                        x=self.gb.index,
                        name='Cumulative',
                        hoverinfo='x+y',
                        hovertemplate="Month: %{x} <br>Cumulative Tank " + self.units + ": %{y}",
                        opacity=0.6,
                        marker=dict(color='rgb(158,202,225)',
                                    line=dict(color='rgb(8,48,107)',
                                              width=1.5,
                                              ),
                                    )
                        )

и мой вывод: enter image description here

В настоящее время у меня установлен xtick в конце месяца. Если я могу сделать столбцы выровненными по правому краю к xtick, я могу использовать собственную ширину стержня, чтобы она достигла конца месяца. Я не думаю, что смогу подсчитать средний день месяца, потому что в месяцах с 31 днем ​​у меня будет либо однодневный разрыв, либо закончится один день. Любая помощь будет принята с благодарностью!

Сюжетное сообщение на форуме, которое я написал по этому вопросу: https://community.plot.ly/t/set-alignment-of-vertical-bar-on-x-axis/23185

1 Ответ

0 голосов
/ 08 мая 2019

ЭТО НЕ РЕШЕНИЕ, НО РАБОТА ВО ВРЕМЯ, ЧТО Я СЧАСТЛИВА С

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

def cumulative_df(df, date_term, y_term, v_print):
    v_print('Making the Monthly Sum DF')
    df = df[[date_term, y_term]]
    df = df.set_index(date_term)
    gb = df.groupby(pd.Grouper(freq="M")).sum()

    starts = []
    for index, row in gb.iterrows():
        new_start = index - pd.offsets.MonthBegin(1, normalize=True)
        starts.append([new_start, row.values[0]])

    starts_df = pd.DataFrame(starts, columns=[date_term, y_term])
    starts_df = starts_df.set_index(date_term)
    gb = gb.append(starts_df, sort=False)
    gb.sort_values(date_term, inplace=True)
    return gb

И вызываемый график:

        cumulative = [go.Scatter(y=self.gb[self.y_column],
                                x=self.gb.index,
                                name='Cumulative',
                                hoverinfo='x+y',
                                hovertemplate="Month: %{x} <br>Cumulative Meter " + self.units + ": %{y}",
                                fill='tozeroy',
                                fillcolor=self.fill_color,
                                line={'color': self.cum_line_color,}
                                )]

        scatters = cumulative + scatters

Вот вывод: output

...