如何用 plotly 散点图显示间隙
How to show gaps with plotly scatter graphs
我有两个pandas系列:
x=[59281.021432, 59281.063095, 59281.104768, 59283.188094, 59283.313102]
x=pd.Series(x)
y=[1.0, 2.1, 3.3, 12.1, 12.3]
y=pd.Series(y)
大小相同。当我用 plotly 绘制图表时,我看不到差距:
fig = go.Figure(layout=go.Layout(xaxis_title='MJD [days]', yaxis_title='value'))
fig.add_trace(go.Scatter(x=x, y=y, type = 'scatter', mode = 'lines'))
我想看到的是同一张图,但有间隙没有线。可能吗?我看到我应该在 59281.104768 和 59283.188094 之间的 serie x 中放入一个 None 字符,但是怎么做呢?
我已经尝试使用此代码来获取下边界和上边界,但我不知道如何完成添加 None 值的系列:
delta = x[1] - x[0]
lowerBounds = (x+delta)[:-1]
upperBounds = (x-delta)[1:]
lowerBounds=lowerBounds.to_numpy()
upperBounds=upperBounds.to_numpy()
mask = lowerBounds<=upperBounds
upperBounds, lowerBounds = upperBounds[mask], lowerBounds[mask]
谢谢
我怀疑这就是你的目的:
如果是这样,那么我会在数据框中组织您的系列,根据定义的 gap
对数据框进行子集化,然后对每个子集使用 add_trace
。
完整代码:
import plotly.graph_objects as go
import pandas as pd
x=[59281.021432, 59281.063095, 59281.104768, 59283.188094, 59283.313102]
x=pd.Series(x)
y=[1.0, 2.1, 3.3, 12.1, 12.3]
y=pd.Series(y)
df = pd.DataFrame({'x':x,
'y':y})
gap = 12
fig = go.Figure(layout=go.Layout(xaxis_title='MJD [days]', yaxis_title='value'))
# fig.add_trace(go.Scatter(x=x, y=y, type = 'scatter', mode = 'markers'))
fig.add_trace(go.Scatter(x=df[df['y']>gap]['x'],
y=df[df['y']>gap]['y'], mode = 'lines',
line=dict(color='blue')))
fig.add_trace(go.Scatter(x=df[df['y']<gap]['x'],
y=df[df['y']<gap]['y'], mode = 'lines',
line=dict(color='blue')))
fig.show()
我有两个pandas系列:
x=[59281.021432, 59281.063095, 59281.104768, 59283.188094, 59283.313102]
x=pd.Series(x)
y=[1.0, 2.1, 3.3, 12.1, 12.3]
y=pd.Series(y)
大小相同。当我用 plotly 绘制图表时,我看不到差距:
fig = go.Figure(layout=go.Layout(xaxis_title='MJD [days]', yaxis_title='value'))
fig.add_trace(go.Scatter(x=x, y=y, type = 'scatter', mode = 'lines'))
我想看到的是同一张图,但有间隙没有线。可能吗?我看到我应该在 59281.104768 和 59283.188094 之间的 serie x 中放入一个 None 字符,但是怎么做呢?
我已经尝试使用此代码来获取下边界和上边界,但我不知道如何完成添加 None 值的系列:
delta = x[1] - x[0]
lowerBounds = (x+delta)[:-1]
upperBounds = (x-delta)[1:]
lowerBounds=lowerBounds.to_numpy()
upperBounds=upperBounds.to_numpy()
mask = lowerBounds<=upperBounds
upperBounds, lowerBounds = upperBounds[mask], lowerBounds[mask]
谢谢
我怀疑这就是你的目的:
如果是这样,那么我会在数据框中组织您的系列,根据定义的 gap
对数据框进行子集化,然后对每个子集使用 add_trace
。
完整代码:
import plotly.graph_objects as go
import pandas as pd
x=[59281.021432, 59281.063095, 59281.104768, 59283.188094, 59283.313102]
x=pd.Series(x)
y=[1.0, 2.1, 3.3, 12.1, 12.3]
y=pd.Series(y)
df = pd.DataFrame({'x':x,
'y':y})
gap = 12
fig = go.Figure(layout=go.Layout(xaxis_title='MJD [days]', yaxis_title='value'))
# fig.add_trace(go.Scatter(x=x, y=y, type = 'scatter', mode = 'markers'))
fig.add_trace(go.Scatter(x=df[df['y']>gap]['x'],
y=df[df['y']>gap]['y'], mode = 'lines',
line=dict(color='blue')))
fig.add_trace(go.Scatter(x=df[df['y']<gap]['x'],
y=df[df['y']<gap]['y'], mode = 'lines',
line=dict(color='blue')))
fig.show()