plot数据框:重叠线和条形图不适用于时间序列索引?

问题描述 投票:1回答:1
import numpy as np                                                                               
import pandas as pd
import matplotlib.pyplot as plt

# create dataframes df0 and df1:
index0 = pd.date_range(start='2014-06-01 00:00:00', end='2014-06-01 00:15:00', freq='1S')          
data0 = np.random.rand(len(index0))                                                                
df0 = pd.DataFrame(data=data0, index=index0, columns=['DF0'])    

index1 = pd.date_range(start='2014-06-01 00:00:00', end='2014-06-01 00:15:00', freq='15S')          
data1 = np.random.rand(len(index1))   
df1 = pd.DataFrame(data=data1, index=index1, columns=['DF1'])                                      

# plot df0 and df1:
fig,ax1 = plt.subplots(figsize=(40,10))
ax2 = ax1.twinx()
df0.plot.line( color="r", ax = ax1)
df1.plot.bar( color ='b', linewidth = 5, ax = ax2, alpha = 0.7)
plt.show()

我可以将数据框覆盖为两个线图或两个条形图。但是,无论我多么努力,我都无法将线形图与条形图或其他方式叠加在一起?使用上面的代码,我仅获得df1的条形图,但没有看到df0的线形图。我必须做些什么?

python-3.x pandas time-series bar-chart overlay
1个回答
0
投票

bar图仅将分类(字符串)值用作x值。因此,简单的破解可以将时间戳转换为字符串。

当输入浮点值时,它将它们转换为str,因此它们与折线图x值的索引不匹配。

df0.index = df0.index.map(str)

也不需要辅助轴。

尝试一下!

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# create dataframes df0 and df1:
index0 = pd.date_range(start='2014-06-01 00:00:00',
                       end='2014-06-01 00:15:00', freq='1S')
data0 = np.random.rand(len(index0))
df0 = pd.DataFrame(data=data0, index=index0, columns=['DF0'])
df0.index = df0.index.map(str)

index1 = pd.date_range(start='2014-06-01 00:00:00',
                       end='2014-06-01 00:15:00', freq='15S')
data1 = np.random.rand(len(index1))
df1 = pd.DataFrame(data=data1, index=index1, columns=['DF1'])

# plot df0 and df1:
fig, ax1 = plt.subplots(figsize=(40, 10))
ax = df0.plot.line(color="r")
df1.plot.bar(color='b', linewidth=5, ax=ax, alpha=0.7)
plt.show()

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.