假设我想制作一个像这样的子图,其中每个方面都有自己的 y 尺度:
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我可以这样做:
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)
可以在情节中做到这一点吗?我对子图和注释感到非常困惑,我知道你可以向子图添加注释,但你必须知道行号和列号才能做到这一点,而且我不确定如何映射方面变量(物种)到子图行/列索引。
谢谢 :)
我不确定这是否是最好的方法,但您可以尝试以下方法
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()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)