使用开始日期和结束日期绘制线条

Plotly lines using start and end dates

我有一个包含以下列的 DataFrame:开始日期结束日期.如何在 Plotly 中为每个 开始-结束日期 绘制一条线?

示例:

import pandas as pd
import plotly.express as px
df = pd.DataFrame({"start date": [1,2,3,4], "end date":[8,7,4,9], "value":[11,3,11,4]})
fig = px.line(df, x=["start date","end date"], y="value")
fig.show()

在这种情况下,开始日期结束日期 列只有两行。但是,我正在寻找的是每个 开始-结束日期 的 1 行。我尝试使用参数 color="value" 但是,在值 11 中它只绘制 1 行。我可以用简单的 plt 打印出来:

import matplotlib.pyplot as plt
x = [df["start date"], df["end date"]]
y = [df["value"], df["value"]]
plt.plot(x, y)
plt.show()

实际上您的绘图包含 y=11 处的两条线,但它们是蓝色和绿色的,因此很难区分。但您可以使用自定义颜色,例如:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm

colors = ['blue', 'red', 'yellow', 'green']
for x1, x2, y, c in zip(df["start date"], df["end date"], df["value"], colors):
    plt.plot([x1, x2], [y, y], color=c)

要创建多个 'indepent' 行,您必须创建多个跟踪,如下例所示:

import pandas as pd
import plotly.graph_objs as go

df = pd.DataFrame({"start date": [1,2,3,4], "end date":[8,7,4,9], "value":[11,3,11,4]})

fig = go.Figure()
for (start, end, value) in zip(df["start date"], df["end date"], df["value"]):
    name = f"{start} to {end}"
    fig.add_trace(go.Scatter(x=[start, end], y=[value, value],
                    mode='lines', name = name))    


fig.show()

结果是: