在同一绘图中绘制多条曲线(x、y1、y2、x、y3、y4)

2024-06-29 01:11:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我试着在y轴上画一个有四个不同值的图。我有6个数组,其中2个有表示时间值的元素​​“x”轴和其他4个表示相对于“y”轴的相应元素(在相同位置)

例如:

LT_TIME = ['18:14:17.566 ', '18:14:17.570']
LT_RP = [-110,-113]
LT_RQ = [-3,-5]
GNR_TIME = ['18: 15: 42.489', '18:32:39.489']
GNR_RP = [-94, -94]
GNR_RQ = [-3, -7]

“LT”图形的坐标为:

('18:14:17.566',-110), ('18:14:17.570',-113), ('18:14:17.566',-3), ('18:14:17.570',-5)

利用这些坐标,我可以生成一个有两个“y”轴的图,其中包含点(-110,-113,-3,-5)和一个有点('18:14:17.566', '18:14:17.570')的“x”轴

同样,也可以使用相同的“GNR”阵列。那么,我怎么能在同一个图上的“LT”和“GNR”数组上有所有笛卡尔点呢???我的意思是,如何绘图,使我在同一个图形上有以下坐标:

('18:14:17.566',-110), ('18:14:17.570 ',-113), ('18:14:17.566',-3),  ('18:14:17.570',-5),
('18:15:42.489',-94), ('18:32:39.489',-94), ('18:15:42.489',-3), ('18:32:39.489',-7)

plot


Tags: lt图形元素绘图利用time时间数组
1条回答
网友
1楼 · 发布于 2024-06-29 01:11:43

听起来您的问题有两个部分:以可视化库能够理解的方式格式化数据,以及使用双轴实际可视化数据

您的示例屏幕截图包括一些交互式控件,因此我建议您使用bokeh,它为您提供“免费”的缩放和平移,而不是matplotlib。此外,我发现bokeh添加双轴的方法更直接。如果matplotlib是必须的,那么here's另一个答案应该为您指明正确的方向

对于第一部分,您可以将现有数据合并到单个数据帧中,如下所示:

import pandas as pd
from bokeh.models import LinearAxis, Range1d, ColumnDataSource
from bokeh.plotting import figure, output_notebook, show

output_notebook() #if working in Jupyter Notebook, output_file() if not

LT_TIME = ['18:14:17.566 ', '18:14:17.570']
LT_RP = [-110,-113]
LT_RQ = [-3,-5]
GNR_TIME = ['18: 15: 42.489', '18:32:39.489']
GNR_RP = [-94, -94]
GNR_RQ = [-3, -7]

s1 = list(zip(LT_TIME, LT_RP)) + list(zip(GNR_TIME, GNR_RP))
s2 = list(zip(LT_TIME, LT_RQ)) + list(zip(GNR_TIME, GNR_RQ))

df1 = pd.DataFrame(s1, columns=["Date", "RP"])
df2 = pd.DataFrame(s2, columns=["Date", "RQ"])
df = df1.merge(df2, on="Date")

source = ColumnDataSource(df)

要将数据可视化为双轴折线图,我们只需指定额外的y轴并将其放置在布局中:

p = figure(x_range=df["Date"], y_range=(-90, -120))

p.line(x="Date", y="RP", color="cadetblue", line_width=2, source=source)

p.extra_y_ranges = {"RQ": Range1d(start=0, end=-10)}
p.line(x="Date", y="RQ", color="firebrick", line_width=2, y_range_name="RQ", source=source)

p.add_layout(LinearAxis(y_range_name="RQ"), 'right')

show(p)

enter image description here

相关问题 更多 >