2016-03-22 19 views
3

私はいくつかの異なるメトリックを表示するには棒グラフと同じチャート上の1本のまたはそれ以上のラインをプロットしようとしています。私はax.twinx()を使うべきだと聞きましたが、xとyが同じ最初の次元を持たなければならないというエラーが出ます。ここに私のコードです。Pythonのプロット棒グラフとパーセンテージ折れ線グラフ

x = df4['Date'] 
    y = df4['Rate'] 
    ax = df4[['Date','Qty']].set_index('Date') \ 
          .plot(kind='bar', 
            stacked=False, 
            color = 'dodgerblue', 
            figsize=(13,4), 
            legend=True) 
    ax.set_xlabel(r"$\rm \bf{Date}$", 
        fontsize=18, 
        rotation = 0) 
    ax.set_ylabel(r'$\cal \bf{Qty}$ ',fontsize=18, rotation = 90) 

    ax2 = ax.twinx() 
    ax2.plot(x, y, color = 'green', linestyle = '--', linewidth= 2.0) 

注: df4は、グループ化されたパンダのデータフレームです。どのように関連性があるのか​​は分かりませんが、ちょうどその場合です。

+0

あなたは私たちが解決策をテストすることができ__text/CSV__形式に設定されたサンプルデータを投稿してくださいだろうか? – MaxU

答えて

2

はこれを試してみてください:

fig, ax = plt.subplots() 
ax2 = ax.twinx() 


df4[['Date','Qty']].set_index('Date') \ 
        .plot(kind='bar', 
         ax=ax, 
         color = 'dodgerblue', 
         figsize=(13,4), 
         legend=False) 

patches, labels = ax.get_legend_handles_labels() 
ax.legend(patches, labels, loc='upper left') 

ax.set_xlabel(r"$\rm \bf{Date}$", fontsize=18, rotation=0) 
ax.set_ylabel(r'$\cal \bf{Qty}$ ',fontsize=18, rotation=90) 

ax2.plot(range(len(df4)), df4['Rate'], 'green', label='Rate', 
     linestyle = '--', linewidth=2.0) 

patches, labels = ax2.get_legend_handles_labels() 
ax2.legend(patches, labels, loc='upper right') 

注:テスト済みのソリューションをしたい場合は、サンプルデータを提供してください

+0

これは実際には完璧に働いた、ありがとう!私はこのサイトには比較的新しいので、チップにもあなたに感謝します。 – JD2015

+1

@JacobDavis、嬉しいことに助かりました:) – MaxU

+0

私はこのトピックについてここで読んだすべてのソリューションのうち、この1つだけが働いていました。ちょっと複雑です(実際にどのように動作しているかをお話したいと思いますが)。 –

関連する問題