2016-04-26 8 views
0

私は何かに苦労しています。私が見落としたことは確かですが、妥当な説明は見つけられません。私のプロットされたサブプロットの最初のプロットは全体の図形を占めます(2x4軸のグリッド)

2x4サブプロットをプロットしてプロットしようとしているとき、8つのグラフの最初のものがサブプロットの位置(1,1)ではなく、8つのグリッド全体にプロットされます。残りの7つのグラフは期待どおりにプロットされ、最初のプロットはその下に部分的に表示されます。

#make a new trace (plot) for every sample: 
def make_trace(x_list, y_list, samplename): 
    trace = go.Scatter(
     x = x_list, 
     y = y_list, 
     name=samplename 
    ) 

    layout = go.Layout(
     title=samplename, 
     showlegend=True 
     ) 
    ) 

    return trace, layout 

#call the make_trace function for every sample and append to the figure 
def make_subplot(): 

    fig = tls.make_subplots(rows=2, cols=4,plot_titles=cols_list) 
    row_num = [1,1,1,1,2,2,2,2,3,3,3,3] 
    column_num = [1,2,3,4,1,2,3,4,1,2,3,4] 
    i = 0 

    for sample in cols_list[1:]: 
     trace, layout = make_trace(normalised_df['percentage'],              
            normalised_df[sample], sample)    
     fig.append_trace(trace, row_num[i], column_num[i]) 
     i += 1 

    fig['layout'].update(title='Normalized Mean Coverage', height=600, 
         width=800,showlegend=False,font=dict(size=14),  
         xaxis=dict(title="Transcript Length (%)"),       
         yaxis=dict(title="Normalised Mean Coverage")) 
    iplot(fig) 

#call the function to create the entire figure: 
make_subplot() 

を出力は次のようになります: coverage plot

**最後の言葉:ソリューションは、x軸/ Y軸のタイトルを設定するにはどこかにあるように思える...ときに私これは私が使用していたコードですfig.update()を呼び出すのではなく、関数呼び出しの 'layout'でそれらを変更します。その後、サブプロットは期待通りに機能しますが、ちょっと小さすぎます。問題は、make_trace()を別の関数として保持したいということです。後で複合プロットを呼び出すので、この関数のx/yaxisタイトルを変更することはできません。

答えて

0

これは、プロットライブラリのバグだったようです。私の場合は、plotlyパッケージをRの3.6.0に更新することで解決しました。Pythonではこれもバグかどうかわかりません。しかしもしそうならgithubでバグ報告をしてください。

敬具 シナン

0

あなたはx軸を設定する必要があり、個別に各サブプロットのためにタイトルをY軸:

for idx, sample in enumerate(cols_list): 
    trace, layout = make_trace(normalised_df['percentage'],        
           normalised_df[sample], sample) 
    fig.append_trace(trace, row_num[i], column_num[i]) 
    fig['layout']['xaxis{}'.format(idx+1)].update(title='Transcript Length (%)') 
    fig['layout']['yaxis{}'.format(idx+1)].update(title='Normalised Mean Coverage') 
関連する問題