熊猫绘制了多个系列,但只展示了一个系列的传奇

时间:2017-08-19 23:04:36

标签: python pandas matplotlib plot

我正在使用ipython笔记本(python 2)并在同一个地块上绘制条形图和线图。有两个系列(NPS和计数等级)。但是,当我尝试显示图例时,它仅显示第二个系列的图例。

以下是我的代码:

ax=nps_funding_month[35:][nps_funding_month['count_ratings']>=100].set_index('funding_month')['nps_percentage'].\
plot(kind='line',color='green',label='NPS')

plt.ylabel('Net Promoter Score')

ax=nps_funding_month[35:][nps_funding_month['count_ratings']>=100].set_index('funding_month')['count_ratings'].\
plot(kind='bar',secondary_y=True,label='Count of Ratings')

plt.ylabel('Count Ratings')

plt.legend()

plt.title('Net Promoter Score by Funding Month\n(Only Funding Months with at Least 100 Reviews)')

Picture of Output

1 个答案:

答案 0 :(得分:2)

以下代码

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

df=pd.DataFrame({"x" : np.arange(5),
                 "a" : np.exp(np.linspace(3,5,5)),
                 "b" : np.exp(-np.linspace(-1,0.5,5)**2)})

ax=df.plot(x="x", y="a", kind='line',color='green',label='NPS')

plt.ylabel('Net Promoter Score')

ax2 = df.plot(x="x", y="b", kind='bar',secondary_y=True,label='Count of Ratings', ax=ax)

plt.ylabel('Count Ratings')

plt.title('Superlongtitle that is not needed')  
plt.show()

产生

enter image description here

请注意,第一个轴作为第二个pandas图(ax=ax)的参数给出,并且没有通过pyplot添加图例(它通过pandas自动传递)。

问题可能是图例隐藏了图例。原因是图例位于第一(下)轴。有两种选择。

  1. 我们可以将它移动到辅助轴,然后也改变它的位置。

    leg = ax.get_legend()
    leg.remove()        # remove it from ax
    ax2.add_artist(leg) # add it to ax2
    leg._set_loc(4)
    

    loc 4表示"左下角"并且是the codes to place the legend之一。

  2. 我们可以将其移出情节,(如How to put the legend out of the plot

    leg._set_loc(2)
    leg.set_bbox_to_anchor((1.1,1))
    ax.figure.subplots_adjust(right=0.6) # make space for the legend outside