Pandas数据帧绘图 - 从两个子图切换到单个图w /辅助轴时出现问题

时间:2016-08-16 19:46:22

标签: python pandas plot

我想在一个图上一起绘制两组数据。我有一组15分钟间隔的流量数据,我想绘制一个线图,以及每小时一次的一组降水数据,我将重新采样到每日时间步骤并绘制成条形图。以下是数据格式的样子:

2016-06-01 00:00:00             56.8
2016-06-01 00:15:00             52.1
2016-06-01 00:30:00             44.0
2016-06-01 00:45:00             43.6
2016-06-01 01:00:00             34.3

首先,我将其设置为两个子图,不同轴上的降水和流速。这完全没问题。这是我的代码:

import matplotlib.pyplot as plt
import pandas as pd
from datetime import datetime

filename = 'manhole_B.csv'
plotname = 'SSMH-2A B'
plt.style.use('bmh')

# Read csv with precipitation data, change index to datetime object
pdf = pd.read_csv('precip.csv', delimiter=',', header=None, index_col=0)
pdf.columns = ['Precipitation[in]']
pdf.index.name = ''
pdf.index = pd.to_datetime(pdf.index)
pdf = pdf.resample('D').sum()
print(pdf.head())

# Read csv with flow data, change index to datetime object
qdf = pd.read_csv(filename, delimiter=',', header=None, index_col=0)
qdf.columns = ['Flow rate [gpm]']
qdf.index.name = ''
qdf.index = pd.to_datetime(qdf.index)


# Plot
f, ax = plt.subplots(2)
qdf.plot(ax=ax[1], rot=30)
pdf.plot(ax=ax[0], kind='bar', color='r', rot=30, width=1)

ax[0].get_xaxis().set_ticks([])
ax[1].set_ylabel('Flow Rate [gpm]')
ax[0].set_ylabel('Precipitation [in]')
ax[0].set_title(plotname)
f.set_facecolor('white')
f.tight_layout()
plt.show()

2 Axis Plot

但是,我决定要在单个轴上显示所有内容,因此我修改了代码以将沉淀放在辅助轴上。现在我的流量数据数据已从图中消失,即使我将轴刻度设置为空集,我也会沿着x轴获得00:15 00:30和00:45刻度线。

Secondary-y axis plots

为什么会出现这种情况的任何想法?

以下是单轴图的代码:

f, ax = plt.subplots()
qdf.plot(ax=ax, rot=30)
pdf.plot(ax=ax, kind='bar', color='r', rot=30, secondary_y=True)
ax.get_xaxis().set_ticks([])

1 个答案:

答案 0 :(得分:0)

以下是一个例子:

设置

In [1]: from matplotlib import pyplot as plt
        import pandas as pd
        import numpy as np
        %matplotlib inline

        df = pd.DataFrame({'x'  : np.arange(10),
                           'y1' : np.random.rand(10,),
                           'y2' : np.square(np.arange(10))})
        df

Out[1]:     x   y1          y2
        0   0   0.451314    0
        1   1   0.321124    1
        2   2   0.050852    4
        3   3   0.731084    9
        4   4   0.689950    16
        5   5   0.581768    25
        6   6   0.962147    36
        7   7   0.743512    49
        8   8   0.993304    64
        9   9   0.666703    81

剧情

In [2]: fig, ax1 = plt.subplots()
        ax1.plot(df['x'], df['y1'], 'b-')
        ax1.set_xlabel('Series')
        ax1.set_ylabel('Random', color='b')
        for tl in ax1.get_yticklabels():
            tl.set_color('b')
        ax2 = ax1.twinx() # Note twinx, not twiny. I was wrong when I commented on your question.
        ax2.plot(df['x'], df['y2'], 'ro')
        ax2.set_ylabel('Square', color='r')
        for tl in ax2.get_yticklabels():
            tl.set_color('r')
Out[2]: 

Plot