1

嗨,我正在尝试更改条形图在条形图上的开始和停止位置。我的目标是拥有一个跨越整个月的酒吧。现在我的代码是:

    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,
                                              ),
                                    )
                        )

我的输出是: 在此处输入图像描述

我目前在月底设置了 xtick。如果我可以使条与 xtick 右对齐,我可以使用自定义条宽度使其达到月末。我不认为我可以计算月中的一天,因为在有 31 天的月份中,我要么有一天的差距,要么会结束一天。任何帮助将不胜感激!

我提出的这个问题的一个情节论坛帖子:https ://community.plot.ly/t/set-alignment-of-vertical-bar-on-x-axis/23185

4

1 回答 1

0

这不是一个解决方案,而是一个让我满意的解决方法

所以我决定通过使用填充折线图来解决问题。这是代码,一个计算每月累积值和绘制填充区域散点对象的辅助函数:

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

这是输出: 输出

于 2019-05-07T23:04:30.163 回答