新来的,诡计多端,疯狂试图解决这个问题。我可以用下面的“生成”列的值对我的数据进行颜色编码。我可以将'Round_Emax‘列的值添加到条形图的上方。但是,我不能同时做这两件事。
当我在px.bar中指定颜色(px.bar=‘Generation),然后尝试使用px.bar添加值时,它会导致round_emax_data的索引重置,添加不正确的标签。然而,我不知道如何解决这个问题。我觉得“更新”这个词是一个线索,它正在改变底层数据,但我还没有弄清楚如何在原始的px.bar()函数调用中添加我需要的内容。我试过“hover_data”选项,但没有成功。
以下是数据的构造:
#for stackoverflow
#imports
import pandas as pd
import plotly.express as px
import plotly.graph_objects as go
#data
emax_SO = [233, 238, 241, 259, 267, 275, 281, 300, 293, 282, 271, 278,
'XXX', 88]
gen = ['Gen1', 'Gen1', 'Gen1', 'Gen1', 'Gen1',
'Gen2', 'Gen2', 'Gen2', 'Gen2','Gen2', 'Gen2', 'Gen2',
'Lit', 'Gen0']
emax_data = [0.0476, 0.0743, 0.0492, 0.0663, 0.0427, 0.0606, 0.0815,
0.0706, 0.0338, 0.0156, 0.0696, 0.0331, 0.0, 0.0]
round_emax_data = [round(x, 3) for x in emax_data]
#construct df
df = pd.DataFrame(emax_mol, dtype=str)
df.columns=['MoleculeID']
df['Generation'] = gen
df['Emax'] = emax_data
df['Round_Emax'] = round_emax_data用所需的条形图标签绘制,没有着色:
fig=px.bar(df,
y = 'Round_Emax',
x='MoleculeID',
#color='Generation',
)
fig.update_traces(texttemplate=round_emax_data,
textposition='outside')
fig.update_layout(yaxis_title='EMax',
title = 'Arbitrary Title')
fig.show()用代码着色绘制,没有条形值:
fig=px.bar(df,
y = 'Round_Emax',
x='MoleculeID',
color='Generation',
)
fig.update_traces(#texttemplate=round_emax_data,
#textposition='outside'
)
fig.update_layout(yaxis_title='EMax',
title = 'Arbitrary Title')
fig.show()两样都要做
fig=px.bar(df,
y = 'Round_Emax',
x='MoleculeID',
color='Generation',
)
fig.update_traces(texttemplate=round_emax_data,
textposition='outside'
)
fig.update_layout(yaxis_title='EMax',
title = 'Arbitrary Title')
fig.show()正如您所看到的,Gen2、Lit和Gen0的值是错误的。但是Gen1的值是正确的。有人能帮忙吗?或者是有人同时做了这两件事的例子?
在平心静气的例子中,他们使用了这一行:
fig.update_traces(texttemplate='%{text:.2s}',texttemplate=‘text’)
在一个示例中,将值放在列的顶部(但它们不按图例着色),但我不理解这个表示法'%{text:.2s}‘。也许我得做这样的事?但我想不出如何使它适应我的数据。我希望这不是个坏问题,我在努力。
发布于 2022-10-31 12:13:31
标签最基本的添加是设置文本项,然后添加用于自动文本显示的设置。px.bar不允许设置标签的显示位置,因此标签位置在图形更新中设置。在本例中,部分文本被切断,因此更改y轴限制。标签表示法的格式为D3格式,请参阅这里。
标记的原因是未知的,但由于颜色中的年龄类别,y轴值似乎是在类别单位中标注的。
fig = px.bar(df,
y = 'Round_Emax',
x = 'MoleculeID',
color = 'Generation',
text = 'Round_Emax',
text_auto='.2%'
)
fig.update_traces(textposition='outside')
fig.update_yaxes(range=[0, 0.1])
fig.show()

https://stackoverflow.com/questions/74262434
复制相似问题