簡體   English   中英

熊貓數據框繪圖-從兩個子圖切換到帶有輔助軸的單個圖時出現的問題

[英]Pandas dataframe plotting - issue when switching from two subplots to single plot w/ secondary axis

我有兩組數據想在一個圖形上繪制在一起。 我有一組以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軸圖

但是,我決定將所有內容顯示在一個軸上,因此我修改了代碼以將降水量放置在第二個軸上。 現在,我的流量數據數據從圖中消失了,即使將軸刻度設置為空集,我也會沿x軸獲得這些00:15 00:30和00:45刻度。

次要Y軸圖

有什么想法可能會發生這種情況嗎?

這是我的單軸繪圖代碼:

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([])

這是一個例子:

設定

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]: 

情節

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM