在 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
和两个参数texttemplate
和textposition
你可以试试这个代码:
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
完成所有这些操作。
但在这里,您应该添加出现在条形内的text
并textposition
调整文本。
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堆叠的条形图中的每个条形段的中间