提问者:小点点

熊猫、matplotlib和plotly-如何修复系列图例?


我正在尝试从熊猫数据帧创建一个交互式plotly图形。

但是,我无法正确显示图例。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import plotly.plotly as py

# sign into the plotly api
py.sign_in("***********", "***********")

# create some random dataframes
dates = pd.date_range('1/1/2000', periods=8)
df1 = pd.DataFrame(np.random.randn(8, 1), index=dates, columns=['A'])
df2 = pd.DataFrame(np.random.randn(8, 1), index=dates, columns=['B'])
df1.index.name = 'date'
df2.index.name = 'date'

现在我尝试用ploly绘制数据帧。

fig, ax = plt.subplots(1,1)
    
df1.plot(y='A', ax=ax)
df2.plot(y='B', ax=ax)
    
py.iplot_mpl(fig, filename='random')

注意没有传说

根据下面的建议,我添加了一个更新命令。虽然这确实显示了图例,但它会弄乱绘图本身:

fig, ax = plt.subplots(1,1)
    
df1.plot(y='A', ax=ax)
df2.plot(y='B', ax=ax)
    
update = dict(
    layout=dict(
        annotations=[dict(text=' ')],  # rm erroneous 'A', 'B', ... annotations
        showlegend=True                # show legend 
    )
)
py.iplot_mpl(fig, update=update, filename='random')

从布局中删除注释条目将导致情节正确显示,但图例不是y列名,而是x列名,即数据帧

fig, ax = plt.subplots(1,1)
    
df1.plot(y='A', ax=ax)
df2.plot(y='B', ax=ax)
    
update = dict(
    layout=dict(
        showlegend=True                # show legend 
    )
)
py.iplot_mpl(fig, update=update, filename='random')

这将导致以下绘图:

我找到了一种覆盖图例文本的方法,但它似乎有点笨拙。鉴于我已经指定了要绘制的dataframe列:

df1.plot(y='A', ax=ax)

我本以为y='A'会导致'A'被用作图例标签。

看起来情况并非如此,虽然可以使用索引标签进行覆盖,如下图所示,但感觉不太对劲。

有没有更好的方法来实现这一结果?

update = dict(
    layout=dict(
        showlegend=True,
    ),
    data=[
        dict(name='A'),
        dict(name='B'),
    ]
)
py.iplot_mpl(fig, update=update, filename='random')


共1个答案

匿名用户

传说不能很好地从matplotlib转换到ploly。

幸运的是,将plotly图例添加到matplotlib绘图是很简单的:

update = dict(
    layout=dict(
        showlegend=True  # show legend 
    )
)
py.iplot_mpl(fig, update=update)

在这里看到完整的工作ipython笔记本。

有关详细信息,请参阅《plotly用户指南》。