如何在 3d 散点图上自动注释
how to automate annotations on 3d scatter plotly plot
here,他们表明要将注释添加到 3d 散点图,可以使用以下代码:
fig.update_layout(
scene=dict(
xaxis=dict(type="date"),
yaxis=dict(type="category"),
zaxis=dict(type="log"),
annotations=[
dict(
showarrow=False,
x="2017-01-01",
y="A",
z=0,
text="Point 1",
xanchor="left",
xshift=10,
opacity=0.7),
dict(
x="2017-02-10",
y="B",
z=4,
text="Point 2",
textangle=0,
ax=0,
ay=-75,
font=dict(
color="black",
size=12
),
arrowcolor="black",
arrowsize=3,
arrowwidth=1,
arrowhead=1),
dict(
x="2017-03-20",
y="C",
z=5,
ax=50,
ay=0,
text="Point 3",
arrowhead=1,
xanchor="left",
yanchor="bottom"
)]
),
)
这很好用,但太手动了。我想自动执行该过程,因为我有太多注释无法手动编写。
这是我的尝试:
for i in range(annotations):
fig.update_layout(
scene=dict(
xaxis=dict(type='linear'),
yaxis=dict(type='linear'),
zaxis=dict(type='linear'),
annotations=[
dict(
x=anx[i],
y=any[i],
z=anz[i],
text='F')]))
然而,绘制时,它只显示最后一个注释,因此它重写了注释,而不是每次迭代都写一个新注释。有谁知道如何自动化注释过程?在我的例子中,每个注释都有相同的文本,但坐标不同。另外,我没有包括情节中每个点的注释,只是一些。
fig.update_layout()
不像 list.append
那样工作,每次调用它时都会向已经存在的集合中添加一些内容。它将根据提供的参数更新布局的配置,并且在循环中这样做只会显示您在上一次迭代中设置的任何内容。
annotations
参数接受一个字典列表,每个注释一个。你可以像这样自动化它
ann = [dict(x=x, y=y, z=z, text='F') for x, y, z in zip(anx, any, anz)]
fig.update_layout(
scene=dict(
xaxis=dict(type="date"),
yaxis=dict(type="category"),
zaxis=dict(type="log"),
annotations=ann
)
)
我还建议您为注释点的 y 坐标找到一个不同的名称,因为 any
已经在 Python 中有一个函数,并且通过重新分配它可以将其删除。
here,他们表明要将注释添加到 3d 散点图,可以使用以下代码:
fig.update_layout(
scene=dict(
xaxis=dict(type="date"),
yaxis=dict(type="category"),
zaxis=dict(type="log"),
annotations=[
dict(
showarrow=False,
x="2017-01-01",
y="A",
z=0,
text="Point 1",
xanchor="left",
xshift=10,
opacity=0.7),
dict(
x="2017-02-10",
y="B",
z=4,
text="Point 2",
textangle=0,
ax=0,
ay=-75,
font=dict(
color="black",
size=12
),
arrowcolor="black",
arrowsize=3,
arrowwidth=1,
arrowhead=1),
dict(
x="2017-03-20",
y="C",
z=5,
ax=50,
ay=0,
text="Point 3",
arrowhead=1,
xanchor="left",
yanchor="bottom"
)]
),
)
这很好用,但太手动了。我想自动执行该过程,因为我有太多注释无法手动编写。
这是我的尝试:
for i in range(annotations):
fig.update_layout(
scene=dict(
xaxis=dict(type='linear'),
yaxis=dict(type='linear'),
zaxis=dict(type='linear'),
annotations=[
dict(
x=anx[i],
y=any[i],
z=anz[i],
text='F')]))
然而,绘制时,它只显示最后一个注释,因此它重写了注释,而不是每次迭代都写一个新注释。有谁知道如何自动化注释过程?在我的例子中,每个注释都有相同的文本,但坐标不同。另外,我没有包括情节中每个点的注释,只是一些。
fig.update_layout()
不像 list.append
那样工作,每次调用它时都会向已经存在的集合中添加一些内容。它将根据提供的参数更新布局的配置,并且在循环中这样做只会显示您在上一次迭代中设置的任何内容。
annotations
参数接受一个字典列表,每个注释一个。你可以像这样自动化它
ann = [dict(x=x, y=y, z=z, text='F') for x, y, z in zip(anx, any, anz)]
fig.update_layout(
scene=dict(
xaxis=dict(type="date"),
yaxis=dict(type="category"),
zaxis=dict(type="log"),
annotations=ann
)
)
我还建议您为注释点的 y 坐标找到一个不同的名称,因为 any
已经在 Python 中有一个函数,并且通过重新分配它可以将其删除。