我想用python中的plotly创建一个时间序列散点图,例如,我有两列数据"a"和"b",列中的每个条目都是事件的日期和时间.我想画一个图,时间在x轴上,y轴只显示列数据的来源,同一列的所有数据点都在一条水平线上.

我不知道如何绘制,因为y轴没有值,我在下面的代码中创建了一些接近我想要的东西,通过创建值列"value\u a"和"value\u b",并将列"a"中的所有点的值设置为1,"b"中的点设置为2,但这在有许多列和数据点的情况下不起作用.谢谢

import plotly.graph_objects as go
import pandas as pd

df = pd.DataFrame(dict(
    a=["2020-01-10", "2020-02-10", "2020-03-10", "2020-04-10", "2020-05-10", "2020-06-10"],
    value_a=[1,1,1,1,1,1],
    b=["2020-01-05", "2020-02-15", "2020-03-18", "2020-08-10", "2021-05-10", "2021-06-10"],
    value_b=[2,2,2,2,2,2]
))


print(df)
fig = go.Figure()
fig.add_trace(go.Scatter(
    mode="markers", x=df["a"], y=df["value_a"],

))
fig.add_trace(go.Scatter(
    mode="markers", x=df["b"], y=df["value_b"],

))

fig.update_xaxes(showgrid=True, ticklabelmode="period")
fig.show()

推荐答案

可以将y值设置为列的名称乘以列的长度:

import plotly.graph_objects as go
import pandas as pd

df = pd.DataFrame(dict(
    a=["2020-01-10", "2020-02-10", "2020-03-10", "2020-04-10", "2020-05-10", "2020-06-10"],
    b=["2020-01-05", "2020-02-15", "2020-03-18", "2020-08-10", "2021-05-10", "2021-06-10"],
))
fig = go.Figure()
for col in df.columns:
    fig.add_trace(go.Scatter(
        mode="markers", 
        x=df[col], 
        y=[col] * len(df[col]),
    ))
fig.update_xaxes(showgrid=True, ticklabelmode="period")

输出:

enter image description here

Python相关问答推荐

使用decorator 重复超载

如何获取Django REST框架中序列化器内部的外卡属性?

如何在Python中增量更新DF

pandas DataFrame中类型转换混乱

已删除的构造函数调用另一个构造函数

如何使用Tkinter创建两个高度相同的框架(顶部和底部)?

按照行主要蛇扫描顺序对点列表进行排序

如何自动抓取以下CSV

如何使用symy打印方程?

删除任何仅包含字符(或不包含其他数字值的邮政编码)的观察

基于索引值的Pandas DataFrame条件填充

Python—从np.array中 Select 复杂的列子集

迭代嵌套字典的值

调用decorator返回原始函数的输出

如何指定列数据类型

什么是合并两个embrame的最佳方法,其中一个有日期范围,另一个有日期没有任何共享列?

在Python中使用if else或使用regex将二进制数据如111转换为001""

matplotlib图中的复杂箭头形状

python—telegraph—bot send_voice发送空文件

并行编程:同步进程