2017-08-01 36 views
0

私は、異なるPandas Dataframesから3つのラインをmatplotlibの同じサブプロットにプロットしようとしています。しかし、私がこれをしたとき、プロットの1つがx軸に沿ってシフトしていることがわかりました(xrangeは各行ごとに異なります)。しかし、個々の行を個別にプロットすると、xlimitは正確であり、どれもシフトされません。私はここで私の問題を再現しようとしました:Matplotlibが誤ってx軸に沿ってラインプロットを移動する

def plot_dH1(title1, title_sim, a, b, c): 
    fig = plt.figure(figsize=(4,4)) 
    plt.style.use(‘ggplot’) 
    sns.set_style(‘ticks’) 
    plt.rcParams[‘font.size’] = 15 

    n = 0 
    for i in range(len(a)): 
     ax = fig.add_subplot(1,1,n+1) 

     ax = a[i].groupby(level=(0, 1)).mean()[0].plot(label=‘$\chi_{180}$‘) 
     ax = b[i].groupby(level=(0, 1)).mean()[0].plot(label=‘All’) 
     ax = c[i].groupby(level=(0, 1)).mean()[0].plot(label=‘$\chi_{90}$‘) 

     ax.set_ylabel(‘$dH$‘) 
     ax.set_xlabel(‘$\lambda_{0}$, $\lambda_{1}$‘) 
     ax.set_title(title_sim[i]) 

     title = title_sim[i] 
     sns.despine(offset=10, ax=ax) 
     plt.xticks(rotation=90) 
#   plt.yticks(range(0,350,20),range(0,350,20)) 

     n = n+1 

    lgd = ax.legend(loc=‘upper center’, bbox_to_anchor=(0.35, -0.8),fancybox=True, shadow=True, ncol=3) 
#  plt.tight_layout() 
#  fig.savefig(‘{}.pdf’.format(‘dHdl_all’)) 
    fig.savefig(‘{}.pdf’.format(‘dHdl_all’),bbox_extra_artists=(lgd,), bbox_inches=‘tight’) 

array = [range(10), range(10,20)] 
tuples = list(zip(*array)) 
index = pd.MultiIndex.from_tuples(tuples) 

a = [pd.DataFrame(np.random.randn(10,1), index=index)] 
b = [pd.DataFrame(np.random.randn(5,1), index=index[5:])] 
c = [pd.DataFrame(np.random.randn(8,1), index=index[2:])] 

plot_dH1(title1, title_sim, a, b, c) 

a、b、cはPandas Data Frameのリストです。画像をアップロードできません。しかし、それを実行すると、問題が表示されます。線の1つがx軸に沿って移動する理由を知っていますか?

答えて

0

最小限で実用的な例を提供できる場合は、より迅速かつ信頼性の高い回答が得られます。あなたの提供されたコードには、名前が変更されたいくつかのインポート、タイトル定義がありませんでした。

offset picture

私は表示されません。

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

def plot_dH1(title1, title_sim, a, b, c): 
    fig = plt.figure(figsize=(4,4)) 
    plt.style.use('ggplot') 
    sns.set_style('ticks') 
    plt.rcParams['font.size'] = 15 

    n = 0 
    for i in range(len(a)): 
     ax = fig.add_subplot(1,1,n+1) 

     ax = a[i].groupby(level=(0, 1)).mean()[0].plot(label='$\chi_{180}$') 
     ax = b[i].groupby(level=(0, 1)).mean()[0].plot(label='All') 
     ax = c[i].groupby(level=(0, 1)).mean()[0].plot(label='$\chi_{90}$') 

     ax.set_ylabel('$dH$') 
     ax.set_xlabel('$\lambda_{0}$, $\lambda_{1}$') 
     ax.set_title(title_sim[i]) 

     sns.despine(offset=10, ax=ax) 
     plt.xticks(rotation=90) 
     n = n+1 

    lgd = ax.legend(loc='upper center', bbox_to_anchor=(0.35, -0.8),fancybox=True, shadow=True, ncol=3) 
    fig.savefig('{}.pdf'.format('dHdl_all'),bbox_extra_artists=(lgd,), bbox_inches='tight') 

array = [range(10), range(10,20)] 
tuples = list(zip(*array)) 
index = pd.MultiIndex.from_tuples(tuples) 

a = [pd.DataFrame(np.random.randn(10,1), index=index)] 
b = [pd.DataFrame(np.random.randn(5,1), index=index[5:])] 
c = [pd.DataFrame(np.random.randn(8,1), index=index[2:])] 
title_sim = np.arange(10) 
title1 = '' 

plot_dH1(title1, title_sim, a, b, c) 

は、Python 3.5.2を使用して、次のプロットを生成します。次のコードを使用して、私はラインのすべてが同じxシフトを開始していることがわかり3つの曲線のうちの1つのxシフトが他の2つに対してプロットされている。 xオフセットが定義され、sns.despine(offset=10, ax=ax)offsetパラメータによって制御されます。ゼロに設定すると、y軸に対して線の全てが隣接することができる:

no offset picture

0

いいえ、データフレームBがacutuallyシフトされます。青い曲線を見てください。それは、これらの値を有していなければならないことを意味する:[5]:インデックスは、インデックスとして定義される

[    0 
5 15 1.398019 
6 16 0.325211 
7 17 0.113059 
8 18 0.814993 
9 19 0.402437] 

だから、X軸に沿って(5〜15)から開始する必要があり、実際には(2、12から開始されます)、これはシフトされていることを意味します。

関連する問題