首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果我使用颜色选项( bar.update_traces()),如何巧妙地防止将错误的标签(通过bar.update_traces())添加到barplot中?

如果我使用颜色选项( bar.update_traces()),如何巧妙地防止将错误的标签(通过bar.update_traces())添加到barplot中?
EN

Stack Overflow用户
提问于 2022-10-31 11:14:23
回答 1查看 16关注 0票数 0

新来的,诡计多端,疯狂试图解决这个问题。我可以用下面的“生成”列的值对我的数据进行颜色编码。我可以将'Round_Emax‘列的值添加到条形图的上方。但是,我不能同时做这两件事。

当我在px.bar中指定颜色(px.bar=‘Generation),然后尝试使用px.bar添加值时,它会导致round_emax_data的索引重置,添加不正确的标签。然而,我不知道如何解决这个问题。我觉得“更新”这个词是一个线索,它正在改变底层数据,但我还没有弄清楚如何在原始的px.bar()函数调用中添加我需要的内容。我试过“hover_data”选项,但没有成功。

以下是数据的构造:

代码语言:javascript
复制
#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

用所需的条形图标签绘制,没有着色:

代码语言:javascript
复制
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()

高于栏的值

用代码着色绘制,没有条形值:

代码语言:javascript
复制
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()

颜色由“世代”标签

两样都要做

代码语言:javascript
复制
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}‘。也许我得做这样的事?但我想不出如何使它适应我的数据。我希望这不是个坏问题,我在努力。

EN

回答 1

Stack Overflow用户

发布于 2022-10-31 12:13:31

标签最基本的添加是设置文本项,然后添加用于自动文本显示的设置。px.bar不允许设置标签的显示位置,因此标签位置在图形更新中设置。在本例中,部分文本被切断,因此更改y轴限制。标签表示法的格式为D3格式,请参阅这里

标记的原因是未知的,但由于颜色中的年龄类别,y轴值似乎是在类别单位中标注的。

代码语言:javascript
复制
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()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74262434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档