python - 在同一图中绘制多条曲线 (x, y1, y2, x, y3, y4)
问题描述
我正在尝试在“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)
和一个带有点的“x”轴('18:14:17.566', '18:14:17.570')
。
类似地,可以执行相同的“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)
解决方案
听起来您的问题有两个部分:以可视化库可以理解的方式格式化数据,并使用双轴实际对其进行可视化。
您的示例屏幕截图包含一些交互式控件,因此我建议您使用散景,它可以让您“免费”进行缩放和平移,而不是matplotlib
. 此外,我发现bokeh
添加双轴的方式更直接。如果matplotlib
是必须的,这是另一个答案,应该为您指明正确的方向。
对于第一部分,您可以将拥有的数据合并到一个数据框中,如下所示:
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)
推荐阅读
- java - 按 Jpa Query 的部分主键过滤
- javascript - 如何使用 Promise 数数
- amazon-web-services - 用于翻译客户端的 aws-sdk-js 导致错误“无法读取未定义的属性 'byteLength'”
- magento2 - 如何向 Magento2 ajax 搜索建议请求添加更多参数?
- xamarin - Xamarin RadioButton IsChecked 在出现完成后由其他 RadioButtonGroup 重置
- python - 如何获得数字“黑匣子”函数的频率响应
- javascript - 通过 props 加载和渲染图像以与传递的图像 url 做出反应
- php - 如何在控制器中发送参数以在 Laravel 8 Mail 中查看
- php - 如何将 blob url 视频下载到 laravel
- javascript - 登录自动化(Web 抓取)问题