2017-05-28 115 views
0

我使用熊猫图绘制密度图。但我无法为每个图表添加适当的图例。我的代码和结果是如下: -在熊猫图中添加传说

for i in tickers: 
    df = pd.DataFrame(dic_2[i]) 
    mean=np.average(dic_2[i]) 
    std=np.std(dic_2[i]) 
    maximum=np.max(dic_2[i]) 
    minimum=np.min(dic_2[i]) 
    df1=pd.DataFrame(np.random.normal(loc=mean,scale=std,size=len(dic_2[i]))) 
    ax=df.plot(kind='density', title='Returns Density Plot for '+ str(i),colormap='Reds_r') 
    df1.plot(ax=ax,kind='density',colormap='Blues_r') 

enter image description here

您可以在PIC看到,顶部右侧框,传说来了为0。如何添加的东西在那边有意义?

print(df.head()) 
      0 
0 -0.019043 
1 -0.0212065 
2 0.0060413 
3 0.0229895 
4 -0.0189266 
+0

你能后的样本数据? –

+0

@AndrewL - df只有指数的每日回报数据。我在编辑上面用df.head() –

回答

2

我想你可能想重新调整你创建图表的方式。一个简单的方法做,这是绘制之前创建ax

# sample data 
df = pd.DataFrame() 
df['returns_a'] = [x for x in np.random.randn(100)] 
df['returns_b'] = [x for x in np.random.randn(100)] 
print(df.head()) 
    returns_a returns_b 
0 1.110042 -0.111122 
1 -0.045298 -0.140299 
2 -0.394844 1.011648 
3 0.296254 -0.027588 
4 0.603935 1.382290 

fig, ax = plt.subplots() 

我然后创建使用的变量指定的参数数据帧:

mean=np.average(df.returns_a) 
std=np.std(df.returns_a) 
maximum=np.max(df.returns_a) 
minimum=np.min(df.returns_a) 

pd.DataFrame(np.random.normal(loc=mean,scale=std,size=len(df.returns_a))).rename(columns={0: 'std_normal'}).plot(kind='density',colormap='Blues_r', ax=ax) 
df.plot('returns_a', kind='density', ax=ax) 

你正在使用的这第二个数据帧是默认情况下创建列0。你需要重命名这个。

enter image description here

0

我想出了一个简单的方法来做到这一点。只需将列名称添加到数据框。

for i in tickers: 
    df = pd.DataFrame(dic_2[i],columns=['Empirical PDF']) 
    print(df.head()) 
    mean=np.average(dic_2[i]) 
    std=np.std(dic_2[i]) 
    maximum=np.max(dic_2[i]) 
    minimum=np.min(dic_2[i]) 
    df1=pd.DataFrame(np.random.normal(loc=mean,scale=std,size=len(dic_2[i])),columns=['Normal PDF']) 
    ax=df.plot(kind='density', title='Returns Density Plot for '+ str(i),colormap='Reds_r') 
    df1.plot(ax=ax,kind='density',colormap='Blues_r') 

enter image description here