在 plotly 中为每个条形图添加两个文本

Posted

技术标签:

【中文标题】在 plotly 中为每个条形图添加两个文本【英文标题】:Add two texts to each bar chart in plotly 【发布时间】:2021-09-20 22:09:49 【问题描述】:

我正在使用 plotly (python) 绘制如下图所示的水平条形图。

import plotly.express as px


fig = px.bar(
         x=prices,
        y=['Average $' + str(round(avg_price, 2)), 'Lowest $' + 
str(round(min_price, 2)), 'Last $' + str(round(last_price, 2)), 
'Proposed $' + str(round(proposed_price, 2))],
         color=['Last', 'Average', 'Lowest',  'Proposed'],
         text=delta,
         orientation='h',
         height=400,
        )
fig.add_vline(x=spend[-1], line_width=2, line_dash="dash", 
line_color="red")
fig.add_vline(x=max(spend), line_width=2, line_dash="dash", 
line_color="green")
fig.update_traces( textposition='outside')


fig.update_layout(
        title="Saving/Loss diagram",
        xaxis_title="",
        yaxis_title="",
        legend_title="Vendor names",
        width=1000,
        )
fig.show()

在此图中,我仅在每个条形图之外显示文本。但现在我要在每个条形图中显示另一个文本。如何在 plotly (python) 中做到这一点?

【问题讨论】:

这能回答你的问题吗? ***.com/a/66837165/16310106 试试这个:fig.update_traces( textposition='inside') @Hamzawi,感谢您的评论,但实际上没有,因为该帖子与matplotlib 库有关,但我的问题是关于plotly 库。 @r-beginners,如果我在我的代码中写fig.update_traces( textposition='inside'),那么它将在每个图表中显示相同的内容(数字)。但我想在每个图表中显示完全不同的文本。 我理解得不够好。要添加一个新的,请使用 add_annotation()。比如你可以写fig.add_annotation(text="text", xref="domain", yref="domain", x=180, y=1, showarrow=False) 【参考方案1】:

如果您想在带有plotly.express 的条内添加文本,您可以使用fig.update_traces 和两个参数texttemplatetextposition

你可以试试这个代码:

import plotly.express as px

data_canada = px.data.gapminder().query("country == 'Canada'")
fig = px.bar(data_canada, x='year', y='pop')
fig.update_traces(texttemplate = data_canada.year.unique(),textposition = "inside")
fig.show()

可以选择使用plotly.graph_objects 完成所有这些操作。

但在这里,您应该添加出现在条形内的texttextposition 调整文本。

import plotly.graph_objects as go

data_canada = px.data.gapminder().query("country == 'Canada'")

fig = go.Figure(data=[go.Bar(
            x=data_canada.year, y=data_canada["pop"],
            text=data_canada.year.unique(),
            textposition='inside'
        )])

fig.show()

根据 cmets 更新:

您可以更改每个条的每个文本的位置,但可能的位置是四个位置:“内部”| “外面” | “汽车” | plotly here 主页上记录的“无”,搜索 textposition 属性。

要做到这一点,你可以这样做:

import plotly.express as px
x = ['Aaron', 'Bob', 'Chris','Tom','Anna']
y = [5, 10, 6, 11, 8]

texts = ["first","second","third","fourth","fifth"]
positions = ['inside','outside','auto','outside','inside']
fig = px.bar(x=x, y=y)
fig.update_traces(texttemplate = texts, textposition = positions)
fig.show()

【讨论】:

感谢您的回答,是的,我明白了您的意思,但就我而言,它有点不同。可能是我的解释不够好。我的目标是同时为每个具有不同位置的单元格添加两个不同的文本。感谢您的回复。非常有用。 是的,上次更新不在您的问题范围内。你会节省很多时间。您的目标是在每个栏中同时添加两个不同位置的两个不同文本?我希望通过在图像上写下您想要的输出来使您的问题更清楚。 很抱歉回复晚了。是的,确实做得很好,感谢您提供如此详细和清晰的解释。但就我而言,我想同时向每个条形添加两个文本。例如对于图表Aaron,您将文本first 放在文本内部,我还想在该条的外部添加另一个文本。我希望我的想法很清楚。也许我的解释不够好(对不起),我实际上完成了任务。如果您有兴趣,我可以与您分享我的解决方案。

以上是关于在 plotly 中为每个条形图添加两个文本的主要内容,如果未能解决你的问题,请参考以下文章

如何实现条形图的日期范围

Plotly:如何使用 go.Bar 向堆积条形图添加数据标签?

R语言ggplot2可视化:使用dplyr包计算每个分组个数的比例使用ggplot2可视化条形图(bar plot)并在条形图上添加百分比标签

R语言ggplot2可视化堆叠的条形图(stacked bar plot)并在每一个条形图的的中间添加对应的数值值标签定位在geom_col堆叠的条形图中的每个条形段的中间

绑定到 NSArrayController 的 core-plot 条形图

Plotly 旭日形图周围的值注释