用 plotly 连接线之间的间隙
Connect gaps between lines with plotly
我有一个脚本可以定期更新绘图并添加散点。我想要一条连接每个点的线。
我获得了这段代码的等价物:
import plotly.graph_objects as go
fig = go.Figure()
fig.add_scatter(x=[1],y=[2])
fig.add_scatter(x=[5],y=[4])
虽然我想要这段代码的输出(所以用一条线连接这些点)
import plotly.graph_objects as go
fig = go.Figure()
fig.add_scatter(x=[1,5],y=[2,4])
很遗憾,我无法加入 [1]
和 [5]
,因为我正在从定期更新的文件中获取数据。
尝试使用
import plotly.express as px
fig = px.line(x=[1, 5], y=[2, 4])
fig.show()
您可以在 px.line
之外设置一个名为 xVal
和 yVal
的空列表,将您的数字附加到列表中并将实际行写为 px.line(x=xVal, y=yVal)
或fig.add_scatter(x=val, y=yVal)
您正在尝试在来自两个不同轨迹的标记之间添加一条线,因为您正在使用:
fig.add_scatter(x=[1],y=[2])
fig.add_scatter(x=[5],y=[4])
据我所知,这是行不通的。只能在同一轨迹的相同点之间画线。我不确定我是否理解为什么您不能在列表中存储新值,但我们暂时将其排除在讨论之外。好消息是,您可以通过以下方式访问 fig
对象中 x
和 y
值的数据:
fig.data[0].x
fig.data[0].y
您还可以向它们附加更多值。唉,不是直接的,因为它们是元组。所以你必须在列表和元组之间切换,但这不是什么大问题。
首先,像这样设置您的 'base' 案例:
import plotly.graph_objects as go
fig = go.Figure()
fig.add_scatter(x=[1],y=[2])
fig.show()
然后,使用新值在 fig` 对象中的现有值上构建:
fig.data[0].x = tuple(list(fig.data[0].x) + [4])
fig.data[0].y = tuple(list(fig.data[0].y) + [5])
fig.show()
如您所见,这些点之间会自动添加一条线,因为它们是同一轨迹中的点。
随机数
这是另一个将随机值添加到图中现有迹线的片段:
fig.data[0].x = tuple(list(fig.data[0].x) + np.random.randint(low=0, high=10, size=1).tolist())
fig.data[0].y = tuple(list(fig.data[0].y) + np.random.randint(low=0, high=10, size=1).tolist())
fig.show()
如果你 运行 几次,例如在它自己的 JupyterLab 单元中,你最终会得到这样的结果:
随机游走
这是另一个示例,它采用跟踪中的 last 值,并添加一个随机数,因此您将在下图中得到一个系列:
fig.data[0].x = tuple(list(fig.data[0].x) + [(list(fig.data[0].x)[-1] + 1)])
fig.data[0].y = tuple(list(fig.data[0].y) + (list(fig.data[0].y)[-1] + np.random.randint(low=-1, high=2, size=1)).tolist())
fig.show()
请注意,与上面的示例相反,本例中的 x-values
已设置为每个 运行 增加 1
。
我有一个脚本可以定期更新绘图并添加散点。我想要一条连接每个点的线。 我获得了这段代码的等价物:
import plotly.graph_objects as go
fig = go.Figure()
fig.add_scatter(x=[1],y=[2])
fig.add_scatter(x=[5],y=[4])
虽然我想要这段代码的输出(所以用一条线连接这些点)
import plotly.graph_objects as go
fig = go.Figure()
fig.add_scatter(x=[1,5],y=[2,4])
很遗憾,我无法加入 [1]
和 [5]
,因为我正在从定期更新的文件中获取数据。
尝试使用
import plotly.express as px
fig = px.line(x=[1, 5], y=[2, 4])
fig.show()
您可以在 px.line
之外设置一个名为 xVal
和 yVal
的空列表,将您的数字附加到列表中并将实际行写为 px.line(x=xVal, y=yVal)
或fig.add_scatter(x=val, y=yVal)
您正在尝试在来自两个不同轨迹的标记之间添加一条线,因为您正在使用:
fig.add_scatter(x=[1],y=[2])
fig.add_scatter(x=[5],y=[4])
据我所知,这是行不通的。只能在同一轨迹的相同点之间画线。我不确定我是否理解为什么您不能在列表中存储新值,但我们暂时将其排除在讨论之外。好消息是,您可以通过以下方式访问 fig
对象中 x
和 y
值的数据:
fig.data[0].x
fig.data[0].y
您还可以向它们附加更多值。唉,不是直接的,因为它们是元组。所以你必须在列表和元组之间切换,但这不是什么大问题。
首先,像这样设置您的 'base' 案例:
import plotly.graph_objects as go
fig = go.Figure()
fig.add_scatter(x=[1],y=[2])
fig.show()
然后,使用新值在 fig` 对象中的现有值上构建:
fig.data[0].x = tuple(list(fig.data[0].x) + [4])
fig.data[0].y = tuple(list(fig.data[0].y) + [5])
fig.show()
如您所见,这些点之间会自动添加一条线,因为它们是同一轨迹中的点。
随机数
这是另一个将随机值添加到图中现有迹线的片段:
fig.data[0].x = tuple(list(fig.data[0].x) + np.random.randint(low=0, high=10, size=1).tolist())
fig.data[0].y = tuple(list(fig.data[0].y) + np.random.randint(low=0, high=10, size=1).tolist())
fig.show()
如果你 运行 几次,例如在它自己的 JupyterLab 单元中,你最终会得到这样的结果:
随机游走
这是另一个示例,它采用跟踪中的 last 值,并添加一个随机数,因此您将在下图中得到一个系列:
fig.data[0].x = tuple(list(fig.data[0].x) + [(list(fig.data[0].x)[-1] + 1)])
fig.data[0].y = tuple(list(fig.data[0].y) + (list(fig.data[0].y)[-1] + np.random.randint(low=-1, high=2, size=1)).tolist())
fig.show()
请注意,与上面的示例相反,本例中的 x-values
已设置为每个 运行 增加 1
。