在用plotly express绘图时,我可以很容易地使用列作为颜色变量,但在plotly.graph_objects.Scatter中很难做到同样的事情。另外,所有的线路都是连接的,如何将它们分开?
import plotly.express as px
import plotly.graph_objects as go
import numpy as np
import pandas as pd
x_values = range(1, 11)
y_values = ['a', 'b', 'c']
xs, ys, zs = [], [], []
for y in y_values:
for x in x_values:
#print(x, y)
xs.append(x)
ys.append(y)
zs.append(np.random.rand())
d = pd.DataFrame({'x': xs, 'y': ys, 'z': zs})
px.line(d, x='x', y='z', color='y')
fig = go.Figure(data=go.Scatter(
x=d['x'],
y=d['y'],
mode='lines'
))
fig.show()
编辑:我知道我们可以对行使用不同的跟踪,但我真的希望复制Plotly Express可以做的事情。
发布于 2020-03-31 11:05:11
在这里,您应该像pd.pivot_table
一样将df
的长度转换为宽度,并为所需的每一列添加一个跟踪。
import plotly.express as px
import plotly.graph_objects as go
import numpy as np
import pandas as pd
x_values = list(range(1, 11))
y_values = ['a', 'b', 'c']
df = pd.DataFrame({"x":x_values*len(y_values),
"y":np.repeat(y_values,len(x_values)),
"z":np.random.rand(len(x_values)*len(y_values))})
# px.line(df, x='x', y='z', color='y')
# long 2 wide
pv = pd.pivot_table(df,
index = "x",
columns="y",
values = "z")\
.reset_index()
fig = go.Figure()
for col in pv.columns[1:]:
fig.add_trace(go.Scatter(
x=pv['x'],
y=pv[col],
mode='lines',
name=col
))
fig.show()
https://stackoverflow.com/questions/60939958
复制相似问题