Plotly python 三元样条 space
Plotly python spline in ternary space
我正在尝试绘制一条样条曲线或插值线,在 plotly python 中,但是,使用通常的样条曲线选项似乎不可能,因为曲线本身会加倍。在这种情况下有没有办法实现平滑曲线?是否有其他图书馆可以完成我可以调用的工作?
编辑:示例数据
a = array([0.15, 0.15, 0.17, 0.2, 0.21, 0.24, 0.26, 0.27, 0.27, 0.29, 0.32, 0.35, 0.39, 0.4, 0.4, 0.41, 0.47, 0.48, 0.52, 0.51, 0.4 0.54、0.56、0.59、0.62、0.63、0.65、0.69、0.73、0.74])
b = 数组([0.14, 0.15, 0.1 , 0.17, 0.17, 0.18, 0.05, 0.16, 0.17, 0.04, 0.03, 0.14, 0.13, 0.13, 0.14, 0.14, 0.13, 0.13, 0.14, 0.14, 0.14, 0.13, 0.13, 0.14, 0. 0.15、0.16、0.18、0.2、0.21、0.22、0.24、0.25、0.25])
c = array([0.71, 0.7, 0.73, 0.63, 0.62, 0.58, 0.69, 0.57, 0.56, 0.67, 0.65, 0.51, 0.48, 0.47, 0.46, 0.45, 0.4, 0.39, 0.34, 0.34, 0.39, 0.34, 0. 0.31、0.28、0.23、0.18、0.16、0.13、0.07、0.02、0.01])
示例代码...
fig5 = go.Figure(go.Scatterternary({
'mode': 'lines',
'connectgaps': True,
'a': a6,
'b': b6,
'c': c6,
'line': {'color': 'black', 'shape': 'spline', 'smoothing': 1},
'marker': {'size': 2, 'line': {'width': 0.1}}
})
)
fig5.add_trace(go.Scatterternary({
'mode': 'markers',
'a': a6,
'b': b6,
'c': c6,
'marker': {'size': 2},
'connectgaps': True,
})
)
fig5.show(renderer="svg")
您可以使用三角坐标的几何图形来隔离要分离的曲线部分,然后使用条件select这部分数据。例如,如果我们 select 曲线的以下部分:
这可以用像 (b < 0.15) & (c > 0.6)
这样的规则来隔离。为了使这个过程更通用一些,我编写了一个函数,允许您传递要绘制的索引列表,并分别为这些组绘制散点图和样条曲线。您可以通过这种方式将曲线分成任意多的部分。
import numpy as np
import plotly.graph_objects as go
a = np.array([0.15, 0.15, 0.17, 0.2 , 0.21, 0.24, 0.26, 0.27, 0.27, 0.29, 0.32, 0.35, 0.39, 0.4 , 0.4 , 0.41, 0.47, 0.48, 0.51, 0.52, 0.54, 0.56, 0.59, 0.62, 0.63, 0.65, 0.69, 0.73, 0.74])
b = np.array([0.14, 0.15, 0.1 , 0.17, 0.17, 0.18, 0.05, 0.16, 0.17, 0.04, 0.03, 0.14, 0.13, 0.13, 0.14, 0.14, 0.13, 0.13, 0.14, 0.14, 0.15, 0.16, 0.18, 0.2 , 0.21, 0.22, 0.24, 0.25, 0.25])
c = np.array([0.71, 0.7 , 0.73, 0.63, 0.62, 0.58, 0.69, 0.57, 0.56, 0.67, 0.65, 0.51, 0.48, 0.47, 0.46, 0.45, 0.4 , 0.39, 0.35, 0.34, 0.31, 0.28, 0.23, 0.18, 0.16, 0.13, 0.07, 0.02, 0.01])
fig = go.Figure()
curve_portion = np.where((b < 0.15) & (c > 0.6))
curve_other_portion = np.where(~((b < 0.15) & (c > 0.6)))
def add_plot_spline_portions(fig, indices_groupings):
for indices in indices_groupings:
fig.add_trace(go.Scatterternary({
'mode': 'lines',
'connectgaps': True,
'a': a[indices],
'b': b[indices],
'c': c[indices],
'line': {'color': 'black', 'shape': 'spline', 'smoothing': 1},
'marker': {'size': 2, 'line': {'width': 0.1}}
})
)
fig.add_trace(go.Scatterternary({
'mode': 'markers',
'a': a[indices],
'b': b[indices],
'c': c[indices],
'marker': {'size': 10, 'color': 'red'},
'connectgaps': True,
})
)
add_plot_spline_portions(fig, [curve_portion, curve_other_portion])
fig.show()
我正在尝试绘制一条样条曲线或插值线,在 plotly python 中,但是,使用通常的样条曲线选项似乎不可能,因为曲线本身会加倍。在这种情况下有没有办法实现平滑曲线?是否有其他图书馆可以完成我可以调用的工作?
编辑:示例数据
a = array([0.15, 0.15, 0.17, 0.2, 0.21, 0.24, 0.26, 0.27, 0.27, 0.29, 0.32, 0.35, 0.39, 0.4, 0.4, 0.41, 0.47, 0.48, 0.52, 0.51, 0.4 0.54、0.56、0.59、0.62、0.63、0.65、0.69、0.73、0.74])
b = 数组([0.14, 0.15, 0.1 , 0.17, 0.17, 0.18, 0.05, 0.16, 0.17, 0.04, 0.03, 0.14, 0.13, 0.13, 0.14, 0.14, 0.13, 0.13, 0.14, 0.14, 0.14, 0.13, 0.13, 0.14, 0. 0.15、0.16、0.18、0.2、0.21、0.22、0.24、0.25、0.25])
c = array([0.71, 0.7, 0.73, 0.63, 0.62, 0.58, 0.69, 0.57, 0.56, 0.67, 0.65, 0.51, 0.48, 0.47, 0.46, 0.45, 0.4, 0.39, 0.34, 0.34, 0.39, 0.34, 0. 0.31、0.28、0.23、0.18、0.16、0.13、0.07、0.02、0.01])
示例代码...
fig5 = go.Figure(go.Scatterternary({
'mode': 'lines',
'connectgaps': True,
'a': a6,
'b': b6,
'c': c6,
'line': {'color': 'black', 'shape': 'spline', 'smoothing': 1},
'marker': {'size': 2, 'line': {'width': 0.1}}
})
)
fig5.add_trace(go.Scatterternary({
'mode': 'markers',
'a': a6,
'b': b6,
'c': c6,
'marker': {'size': 2},
'connectgaps': True,
})
)
fig5.show(renderer="svg")
您可以使用三角坐标的几何图形来隔离要分离的曲线部分,然后使用条件select这部分数据。例如,如果我们 select 曲线的以下部分:
这可以用像 (b < 0.15) & (c > 0.6)
这样的规则来隔离。为了使这个过程更通用一些,我编写了一个函数,允许您传递要绘制的索引列表,并分别为这些组绘制散点图和样条曲线。您可以通过这种方式将曲线分成任意多的部分。
import numpy as np
import plotly.graph_objects as go
a = np.array([0.15, 0.15, 0.17, 0.2 , 0.21, 0.24, 0.26, 0.27, 0.27, 0.29, 0.32, 0.35, 0.39, 0.4 , 0.4 , 0.41, 0.47, 0.48, 0.51, 0.52, 0.54, 0.56, 0.59, 0.62, 0.63, 0.65, 0.69, 0.73, 0.74])
b = np.array([0.14, 0.15, 0.1 , 0.17, 0.17, 0.18, 0.05, 0.16, 0.17, 0.04, 0.03, 0.14, 0.13, 0.13, 0.14, 0.14, 0.13, 0.13, 0.14, 0.14, 0.15, 0.16, 0.18, 0.2 , 0.21, 0.22, 0.24, 0.25, 0.25])
c = np.array([0.71, 0.7 , 0.73, 0.63, 0.62, 0.58, 0.69, 0.57, 0.56, 0.67, 0.65, 0.51, 0.48, 0.47, 0.46, 0.45, 0.4 , 0.39, 0.35, 0.34, 0.31, 0.28, 0.23, 0.18, 0.16, 0.13, 0.07, 0.02, 0.01])
fig = go.Figure()
curve_portion = np.where((b < 0.15) & (c > 0.6))
curve_other_portion = np.where(~((b < 0.15) & (c > 0.6)))
def add_plot_spline_portions(fig, indices_groupings):
for indices in indices_groupings:
fig.add_trace(go.Scatterternary({
'mode': 'lines',
'connectgaps': True,
'a': a[indices],
'b': b[indices],
'c': c[indices],
'line': {'color': 'black', 'shape': 'spline', 'smoothing': 1},
'marker': {'size': 2, 'line': {'width': 0.1}}
})
)
fig.add_trace(go.Scatterternary({
'mode': 'markers',
'a': a[indices],
'b': b[indices],
'c': c[indices],
'marker': {'size': 10, 'color': 'red'},
'connectgaps': True,
})
)
add_plot_spline_portions(fig, [curve_portion, curve_other_portion])
fig.show()