график данных графика: наложение линии и гистограммы не работает для индекса временных рядов? - PullRequest
1 голос
/ 10 марта 2020
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. Что я должен делать по-другому?

1 Ответ

0 голосов
/ 10 марта 2020

bar plot принимает категориальные (строковые) значения только в качестве значений 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

...