python - 如何有效地绘制点两两连接的大量线条形状?
问题描述
我需要用plotly
. 与可以连接所有点的常规散点图相反,这里我只需要两两连接点。
我考虑了不同的选择:
- 在绘图中添加线条形状;显然相对较慢
- 创建大量只有两个点的线图
有没有更合适的方法?可能是一个散点图,其中只有每隔几个点连接。
我正在寻找一种在 Python 中生成绘图的有效方法,同时也寻求良好的渲染性能。
解决方案
该答案基于 Maximilian Peters 评论中的建议,以及 Jezraels在每 nth row 之后插入新行的方法。
一个关键部分还包括fig.update_traces(connectgaps=False)
阴谋:
完整代码:
import numpy as np
import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
# dataframe, sample
np.random.seed(123)
cols = ['a','b','c', 'd', 'e', 'f', 'g']
X = np.random.randn(50,len(cols))
df=pd.DataFrame(X, columns=cols)
df=df.cumsum()
df['id']=df.index
# dataframe with every nth row containing np.nan
df2 = (df.iloc[1::2]
.assign(id = lambda x: x['id'] + 1, c = np.nan)
.rename(lambda x: x + .5))
df1 = pd.concat([df, df2], sort=False).sort_index().reset_index(drop=True)
df1.loc[df1.isnull().any(axis=1), :] = np.nan
df1
# plotly figure
colors = px.colors.qualitative.Plotly
fig = go.Figure()
for i, col in enumerate(df1.columns[:-1]):
fig.add_traces(go.Scatter(x=df1.index, y=df1[col],
mode='lines+markers', line=dict(color=colors[i])))
fig.update_traces(connectgaps=False)
fig.show()
推荐阅读
- python - 如何修复python中文件列表中没有属性“名称”错误
- google-chrome-extension - Web 扩展中的登录用户
- typescript - 使用打字稿别名时,eslint import/order 崩溃
- pine-script - 获取股票代码以跟随价格
- r - 在 R 中模拟骰子游戏;似乎不是随机的
- javascript - 如何使 jquery 脚本更易于阅读?
- c# - Disable WebDav Programatically .NET 3.1 or grater
- laravel - Laravel - How to Login with either email or phone using Laravel resful api
- angular - Can mat-autocomplete use mat-option components contained inside another component?
- ruby-on-rails - Delete if just one record in the join table in rails