Plotly:如何使用 plotly express 在单迹散点图中显示图例?

SOf*_*UAR 4 python data-visualization plotly plotly-python plotly-express

抱歉,帖子太长了。我是 python 和 plotly 的新手,所以请耐心等待。

我正在尝试制作带有趋势线的散点图,以向我展示包括回归参数在内的图例图例,但出于某种原因,我不明白为什么px.scatter不向我展示我的轨迹图例。这是我的代码

fig1 = px.scatter(data_frame = dataframe,
             x="xdata",
             y="ydata",
             trendline = 'ols')

fig1.layout.showlegend = True
fig1.show()
Run Code Online (Sandbox Code Playgroud)

这会显示散点图和趋势线,但即使我试图覆盖它也没有图例。

我曾经pio.write_json(fig1, "fig1.plotly")将它导出到 jupyterlab plotly 图表工作室并手动添加图例,但即使我启用了它,它也不会显示在图表工作室中。

我打印了变量print(fig1)以查看发生了什么,这是(部分)结果

(Scatter({
    'hovertemplate': '%co=%{x}<br>RPM=%{y}<extra></extra>',
    'legendgroup': '',
    'marker': {'color': '#636efa', 'symbol': 'circle'},
    'mode': 'markers',
    'name': '',
    'showlegend': False,
    'x': array([*** some x data ***]),
    'xaxis': 'x',
    'y': array([*** some y data ***]),
    'yaxis': 'y'
}), Scatter({
    'hovertemplate': ('<b>OLS trendline</b><br>RPM = ' ... ' <b>(trend)</b><extra></extra>'),
    'legendgroup': '',
    'marker': {'color': '#636efa', 'symbol': 'circle'},
    'mode': 'lines',
    'name': '',
    'showlegend': False,
    'x': array([*** some x data ***]),
    'xaxis': 'x',
    'y': array([ *** some y data ***]),
    'yaxis': 'y'
}))
Run Code Online (Sandbox Code Playgroud)

正如我们所看到的,px.scatter默认情况下创建一个图形会在有单个跟踪时隐藏图例(我尝试向其中添加color属性px.scatter并显示图例),并且搜索px.scatter文档我找不到与覆盖图例设置相关的内容。

我回到导出的文件 (fig1.plotly.json) 并手动将showlegend条目更改为True,然后我可以在图表工作室中看到图例,但必须有某种方法可以直接从命令中执行此操作。

问题是:有谁知道自定义 px.express 图形对象的方法?

我看到的另一个解决方法是使用低级绘图对象创建,但我不知道如何添加趋势线。

再次感谢您阅读所有这些内容。

ves*_*and 5

您必须指定要显示图例提供如下图例名称:

fig['data'][0]['showlegend']=True
fig['data'][0]['name']='Sepal length'
Run Code Online (Sandbox Code Playgroud)

阴谋:

在此处输入图片说明

完整代码:

import plotly.express as px
df = px.data.iris() # iris is a pandas DataFrame
fig = px.scatter(df, x="sepal_width", y="sepal_length",
                 trendline='ols',
                 trendline_color_override='red')
fig['data'][0]['showlegend']=True
fig['data'][0]['name']='Sepal length'
fig.show()
Run Code Online (Sandbox Code Playgroud)

完整代码: