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

Posted

技术标签:

【中文标题】Plotly:如何使用 plotly express 在单迹散点图中显示图例?【英文标题】:Plotly: How to show legend in single-trace scatterplot with plotly express? 【发布时间】:2020-07-27 19:39:23 【问题描述】:

抱歉,很长的帖子。我是 python 和 plotly 的新手,所以请多多包涵。

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

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

fig1.layout.showlegend = True
fig1.show()

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

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

我用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'
))

如我们所见,默认情况下使用px.scatter 创建图形会在有单个跟踪时隐藏图例(我尝试将color 属性添加到px.scatter 并显示图例),并搜索@987654330 @documentation 我找不到与覆盖图例设置相关的内容。

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

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

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

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

【问题讨论】:

您介意生成mcve 吗?特别是如果有你的dataframe 的样本会很棒。 对不起,我没有包括数据的细节,因为我确定跟踪是单个 (x,y) 并且问题更面向命令。我会记住下一篇文章的。谢谢。 【参考方案1】:

您必须指定要显示图例提供这样的图例名称:

fig['data'][0]['showlegend']=True
fig['data'][0]['name']='Sepal length'

剧情:

完整代码:

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()

完整代码:

【讨论】:

这正是我想要的。谢谢!临走之前,现在可以把散点图转成箱线图,保持趋势线吗?

以上是关于Plotly:如何使用 plotly express 在单迹散点图中显示图例?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 R 的 plotly 包中使用 plotly 函数?

如何使用 Plotly Express 和 Plotly 隐藏图例

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

Plotly:如何使用 plotly express 自定义 xaxis 刻度标签?

Plotly:使用 plotly express 行时如何在 hoverinfo 中格式化日期?

Plotly:如何使用 plotly.graph_objects 将两个 3D 图放在同一个图上?