Python 将数据框绘制为同一图表上的条形图和线条图

Python 将数据框绘制为同一图表上的条形图和线条图,python,matplotlib,charts,pandas,Python,Matplotlib,Charts,Pandas,我试图绘制一张图表,第一列和第二列数据为条形,然后第三列数据为直线叠加 我已经尝试了下面的代码,但这会创建两个单独的图表,但我希望所有这些都在一个图表上 left_2013 = pd.DataFrame({'month': ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec'], '2013_val': [1, 2, 3, 4, 5, 6,

我试图绘制一张图表,第一列和第二列数据为条形,然后第三列数据为直线叠加

我已经尝试了下面的代码,但这会创建两个单独的图表,但我希望所有这些都在一个图表上

left_2013 = pd.DataFrame({'month': ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec'],
                     '2013_val': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 9, 6]})

right_2014 = pd.DataFrame({'month': ['jan', 'feb'], '2014_val': [4, 5]})

right_2014_target = pd.DataFrame({'month': ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec'],
                                   '2014_target_val': [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]})


df_13_14 = pd.merge(left_2013, right_2014, how='outer')
df_13_14_target = pd.merge(df_13_14, right_2014_target, how='outer')
df_13_14_target[['month','2013_val','2014_val','2014_target_val']].head(12)

plt.figure()
df_13_14_target[['month','2014_target_val']].plot(x='month',linestyle='-', marker='o')
df_13_14_target[['month','2013_val','2014_val']].plot(x='month', kind='bar')
这是我目前得到的


数据帧打印方法返回matplotlib
AxesSubplot
AxesSubplots
列表。(例如,请参见或。)

然后,可以将相同的轴传递到下一个打印方法(使用
ax=ax
)以在相同的轴上绘制:

ax = df_13_14_target[['month','2014_target_val']].plot(x='month',linestyle='-', marker='o')
df_13_14_target[['month','2013_val','2014_val']].plot(x='month', kind='bar', 
   ax=ax)


我成功地通过以下代码实现了这一点:图ax=plt.subplot()df_13_14_target[['month','2014_target\u val']]。plot(x='month',ax=ax,linestyle='-',marker='o',color='r')df_13_14_target[['month','2013_val','2014_val']]。plot(x='month',ax ax ax max=ax kind='bar')然而,关于如何使线条图居中于横杆之上的任何想法,问题在于索引。默认情况下,绘图方法设置
使用_index=True
定义x轴刻度标签。尝试设置
use_index=False
,您将得到预期的结果。我们有没有办法为这条线设置一个不同的轴?假设它有标准化的值,我想在右边显示另一个y轴,带有限制(0,1),并让线跟随该轴
use_index=False
,如果序列之间的索引值不相同,则可能会很危险。。。
import pandas as pd
import matplotlib.pyplot as plt

left_2013 = pd.DataFrame(
    {'month': ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep',
               'oct', 'nov', 'dec'],
     '2013_val': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 9, 6]})

right_2014 = pd.DataFrame({'month': ['jan', 'feb'], '2014_val': [4, 5]})

right_2014_target = pd.DataFrame(
    {'month': ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep',
               'oct', 'nov', 'dec'],
     '2014_target_val': [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13]})

df_13_14 = pd.merge(left_2013, right_2014, how='outer')
df_13_14_target = pd.merge(df_13_14, right_2014_target, how='outer')

ax = df_13_14_target[['month', '2014_target_val']].plot(
    x='month', linestyle='-', marker='o')
df_13_14_target[['month', '2013_val', '2014_val']].plot(x='month', kind='bar',
                                                        ax=ax)

plt.show()