Plotly 如何在同一 Y 轴上绘制具有不同 X 数组的多条线
Plotly How to plot multiple lines with different X-arrays on the same Y-axis
例如,我尝试在 python 中使用 plotly 在同一张图上绘制多条具有自己的 X 值的线。
x1 = [1, 3, 5, 7, 9]
y1 = np.random.random(5)
x2 = [2, 4, 6, 8, 10]
y2 = np.random.random(5)
我想在从 1 到 10 的一个 x 轴上绘制它。
Whosebug 上的所有答案(如 )都用 pandas 数据框描述了解决方案,其中所有行(y1 和 y2)都具有与每一行对应的相同 x 值数组。但是,在我的例子中,y1 和 y2 具有不同的(尽管单位相同)对应的 x 值。
如何在plotly中制作这样的情节?
当你没有数据框时,我认为最简单的方法是使用 plotly.graph_objects
。
import plotly.graph_objects as go
x1 = [1, 3, 5, 7, 9]
y1 = np.random.random(5)
x2 = [2, 4, 6, 8, 10]
y2 = np.random.random(5)
f1 = go.Figure(
data = [
go.Scatter(x=x1, y=y1, name="first"),
go.Scatter(x=x2, y=y2, name="second"),
],
layout = {"xaxis": {"title": "x axis"}, "yaxis": {"title": "y axis"}, "title": "My title"}
)
f1
您也可以使用 plotly.express
模块,但是它需要更多的代码来设置图例上的名称。
在此 documentation page 了解更多信息。
在您的示例数据上只需要 一点 数据争论,您可以只使用这一行:
fig = px.line(df, x = 'x', y = 'y', color = 'name', markers = True)
得到这个:
争论只是从您的类别中构建两个数据框并将其堆叠到 so-called long-form which plotly express handles beautifully 中。与 so-called wide-form 数据相反,不同类别具有不同数量的观察值并不重要。
完整代码:
import plotly.express as px
import pandas as pd
import numpy as np
x1 = [1, 3, 5, 7, 9]
y1 = np.random.random(5)
x2 = [2, 4, 6, 8, 10]
y2 = np.random.random(5)
df1 = pd.DataFrame({'name': ['1']*len(x1),
'x': x1,
'y': y1})
df2 = pd.DataFrame({'name': ['2']*len(x2),
'x': x2,
'y': y2})
df = pd.concat([df1, df2])
fig = px.line(df, x = 'x', y = 'y', color = 'name', markers = True)
fig.show()
例如,我尝试在 python 中使用 plotly 在同一张图上绘制多条具有自己的 X 值的线。
x1 = [1, 3, 5, 7, 9]
y1 = np.random.random(5)
x2 = [2, 4, 6, 8, 10]
y2 = np.random.random(5)
我想在从 1 到 10 的一个 x 轴上绘制它。
Whosebug 上的所有答案(如
如何在plotly中制作这样的情节?
当你没有数据框时,我认为最简单的方法是使用 plotly.graph_objects
。
import plotly.graph_objects as go
x1 = [1, 3, 5, 7, 9]
y1 = np.random.random(5)
x2 = [2, 4, 6, 8, 10]
y2 = np.random.random(5)
f1 = go.Figure(
data = [
go.Scatter(x=x1, y=y1, name="first"),
go.Scatter(x=x2, y=y2, name="second"),
],
layout = {"xaxis": {"title": "x axis"}, "yaxis": {"title": "y axis"}, "title": "My title"}
)
f1
您也可以使用 plotly.express
模块,但是它需要更多的代码来设置图例上的名称。
在此 documentation page 了解更多信息。
在您的示例数据上只需要 一点 数据争论,您可以只使用这一行:
fig = px.line(df, x = 'x', y = 'y', color = 'name', markers = True)
得到这个:
争论只是从您的类别中构建两个数据框并将其堆叠到 so-called long-form which plotly express handles beautifully 中。与 so-called wide-form 数据相反,不同类别具有不同数量的观察值并不重要。
完整代码:
import plotly.express as px
import pandas as pd
import numpy as np
x1 = [1, 3, 5, 7, 9]
y1 = np.random.random(5)
x2 = [2, 4, 6, 8, 10]
y2 = np.random.random(5)
df1 = pd.DataFrame({'name': ['1']*len(x1),
'x': x1,
'y': y1})
df2 = pd.DataFrame({'name': ['2']*len(x2),
'x': x2,
'y': y2})
df = pd.concat([df1, df2])
fig = px.line(df, x = 'x', y = 'y', color = 'name', markers = True)
fig.show()