这是生成图表的 Python 代码:
def createBarChart(df):
# Convert the columns ‘start’ and ‘end’ into datetime objects
df['start'] = pd.to_datetime(df['start'])
df['ende'] = pd.to_datetime(df['ende'])
# Create Diagramm
fig = go.Figure()
for i, row in df.iterrows():
fig.add_trace(go.Scatter(
x=[row['start'], row['ende'], row['ende'], row['start']],
y=[1, 1, 0, 0],
fill='toself',
fillcolor=row['color'],
mode='none',
showlegend=False,
))
# Formatting the x-axis
tickvals = pd.date_range(start=df['start'].min(), end=df['ende'].max(), freq='3H')
ticktext = []
previous_day = None
for d in tickvals:
if previous_day is None or d.day != previous_day:
ticktext.append(f"<b>{d.strftime('%d.%m')}</b>")
else:
ticktext.append(d.strftime('%H:%M'))
previous_day = d.day
fig.update_layout(
yaxis=dict(showticklabels=False),
xaxis=dict(
tickformat='%H:%M',
tickvals=tickvals,
ticktext=ticktext
),
margin=dict(l=20, r=20, t=10, b=20),
height=200,
)
return fig
现在我们来解决问题了。为了显示该图表,我从 CSV 文件中读取数据。 CSV 文件中的每一行都是一个块。最后两个块是绿色的。但是,这两者之间有一条小线,我想将其删除,使其成为连续的绿色条。
这是因为第二个区块的开始时间没有立即跟随
因此要消除间隙,您可以使用
for i in range(len(df) - 1):
if df.loc[i, 'color'] == df.loc[i + 1, 'color']:
df.loc[i, 'ende'] = df.loc[i + 1, 'start']
这将确保当前行的结束时间与下一行的开始时间匹配