首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用plotly-express的注释因子图而异?

使用plotly-express的注释因子图而异?
EN

Stack Overflow用户
提问于 2020-07-28 12:27:54
回答 1查看 586关注 0票数 3

假设我想制作一个这样的子图,其中每个面都有自己的y比例:

代码语言:javascript
复制
import plotly.express as px

fig = px.scatter(px.data.iris(), x='sepal_length', y='sepal_width', facet_col='species')


def update(y):
    y.update(matches=None)
    y.showticklabels=True

fig.for_each_yaxis(update)

现在假设我想要添加一些注释,位置将根据刻面变量的不同而变化,并且我在一个数据帧中有以下内容:

如果我使用的是plotnine/ggplot,我可以这样做:

代码语言:javascript
复制
ggplot(df_iris, aes(x='sepal_length', y='sepal_width')) + geom_point() + facet_wrap("~species", scales="free_y") + geom_text(aes(x='x', y='y', label='label'), data=df_text) 

有没有可能在密谋中做到这一点?我被子图和注释搞得焦头烂额,我知道您可以向子图添加注释,但您必须知道行和列号才能做到这一点,而且我不确定如何将facet变量(物种)映射到子图的行/列索引。

谢谢:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-28 23:14:47

我不确定这是否是最好的方法,但您可以尝试以下方法

代码语言:javascript
复制
import plotly.express as px
import pandas as pd

df_text = pd.DataFrame({"species":["setosa", "versicolor", "virginica"],
                        "x": [7, 7, 5],
                        "y": [3, 2, 3.5],
                        "label":["label1", "label2", "label3"]})

fig = px.scatter(px.data.iris(),
                 x='sepal_length',
                 y='sepal_width',
                 facet_col='species')

# Here are your annotations
data = px.scatter(df_text,
                  x="x",
                  y="y",
                  text="label",
                  facet_col='species')\
          .update_traces(mode="text")["data"]

def update(y):
    y.update(matches=None)
    y.showticklabels=True
    
fig.for_each_yaxis(update)

for trace in data:
    fig.add_trace(trace)

fig.show()

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

https://stackoverflow.com/questions/63127031

复制
相关文章

相似问题

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