【问题标题】:Ploting multiple curves (x, y1, y2, x, y3, y4) in the same plot在同一图中绘制多条曲线 (x, y 1, y2, x, y3, y4)
【发布时间】:2020-08-14 13:21:03
【问题描述】:

我正在尝试在“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)

【问题讨论】:

  • 可以添加已有的代码吗?并解释什么进展顺利,什么不顺利?
  • 欢迎来到 Stack Overflow!请take the tour(你得到一个徽章!)并通读help center,特别是good question?你最好的选择是做你的研究,search关于SO的相关主题,然后试一试。如果您在进行更多研究后遇到困难并且无法摆脱困境,请发布您的尝试Verifiable Example,并具体说明您卡在哪里。人们会很乐意提供帮助。

标签: python matplotlib data-visualization


【解决方案1】:

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

您的示例屏幕截图包含一些交互式控件,因此我建议您使用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)

【讨论】:

  • 非常感谢@gherka。你帮了我很多!
猜你喜欢
  • 2014-02-13
  • 2021-07-18
  • 1970-01-01
  • 2015-01-16
  • 1970-01-01
  • 2020-09-04
  • 2017-03-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多