在 Plotly 中更改/更新 xtick 标签和 ytick 标签的不一致

Posted

技术标签:

【中文标题】在 Plotly 中更改/更新 xtick 标签和 ytick 标签的不一致【英文标题】:Inconsistency in changing/updating xtick labels and ytick labels in Plotly 【发布时间】:2019-08-16 11:28:36 【问题描述】:

让我用一个例子来演示。让我们以here 所示的简单线图为例,它是 Plotly 用户指南中的第一个图:

from plotly.offline import download_plotlyjs, init_notebook_mode, plot, iplot
import plotly.graph_objs as go

trace1 = go.Scatter(x=[1,2,3], y=[4,5,6], marker='color': 'red', 'symbol': 104, 'size': 10, 
                    mode="markers+lines",  text=["one","two","three"], name='1st Trace')

data=go.Data([trace1])
layout=go.Layout(title="First Plot", xaxis='title':'x1', yaxis='title':'x2')
figure1=go.Figure(data=data,layout=layout)
init_notebook_mode(connected=True)
iplot(figure1)

现在,假设我想将 x-tick 标签更新为 'A', 'B', 'C',将 ytick 标签更新为 'E', 'F', 'G'。我可以通过像这样更新图形来做到这一点:

figure1['data'][0]['x']=['A', 'B', 'C']
figure1['data'][0]['y']=['E', 'F', 'G']

iplot(figure1)

到目前为止一切顺利。但是,假设我首先使用 matplotlib 绘制图形,然后像这样转换为 plotly:

import matplotlib.pyplot as plt
import plotly.tools as tls

plt.plot([1,2,3], [4,5,6], 'r+-', markersize=10)
plt.xlabel('x2')
plt.ylabel('y2')

mpl_fig = plt.gcf()
figure2 = tls.mpl_to_plotly(mpl_fig)

init_notebook_mode(connected=True)
iplot(figure2)

例如,当您用于绘制图形的库被设计为仅与 matplotlib 一起使用(或者可能是最大的 seaborn)时,这是相关的。但是你想让情节动态/互动并在情节中使用它们。

这次如果我尝试以与以前完全相同的方式更新图形,我得到一个空白图形!

figure2['data'][0]['x']=['A', 'B', 'C']
figure2['data'][0]['y']=['E', 'F', 'G']

iplot(figure2)

不仅是一个空白图形,xtick 标签和 ytick 标签也保持不变。

当我深入研究 figure1['data'][0]['x'] 中包含的内容时,我发现它是一个元组:

当我检查 figure2['data'][0]['x'] 中包含的内容时,它也是完全相同的元组:

figure1['data'][0]['y']figure2['data'][0]['y'] 也是如此——它们都包含元组 ('E', 'F', 'G')

那么,发生了什么事?为什么更新刻度标签后figure2 不被绘制?我该如何解决?

【问题讨论】:

【参考方案1】:

到目前为止,我通过修补自己找到的解决方法是基本上用空白布局替换布局。出于某种原因,从 matplotlib 转换的绘图图的布局似乎导致对图形的更新没有反映。将布局设为空白后(然后,如果需要,向其中添加内容,如标题和轴标签,如下所示),它似乎工作正常:

figure2['layout'] = 'title':'First plot', 'xaxis':'title':'x2', 'yaxis':'title':'y2'

figure2['data'][0]['x']=['A', 'B', 'C']
figure2['data'][0]['y']=['E', 'F', 'G']

iplot(figure2)

【讨论】:

以上是关于在 Plotly 中更改/更新 xtick 标签和 ytick 标签的不一致的主要内容,如果未能解决你的问题,请参考以下文章

Plotly:如何为所有子图设置 xticks?

Plotly:如何设置自定义 xticks

Plotly:如何在 plotly express 折线图中更改图例的变量/标签名称?

Plotly:更改图例标签并聚合数值

在 R 函数 ggplotly 中(来自 plotly 包),如何调整标签内容

如何在 Matlab 中为 XTicks 的不完整标签设置非零符号?