如何重新创建此熊猫数据框,线条和条形图

时间:2020-08-31 07:26:47

标签: python pandas matplotlib

以前,我设法创建了以下情节

enter image description here

import pandas as pd
import matplotlib.pyplot as plt

df_prog = pd.DataFrame({"Prognos tim": [2, 3, 3]})
df_prog.index = pd.date_range(start='2020-01-01 00', end='2020-01-01 02', freq='H')
df_prog.index = df_prog.index + pd.Timedelta(minutes=30)

现在,我试图再次创建此图,但没有成功。我的记忆让我失望

我尝试过

ax = df_prog.plot(kind='bar')
df_prog.plot(kind='line')

Plot Pandas DataFrame as Bar and Line on the same one chart

中所述

但是根据首先选择的是条形还是线形,只显示一个,而不是在同一图中显示。

2 个答案:

答案 0 :(得分:2)

您需要将时间轴转换为字符串。然后,您可以将它们绘制在一起。

import pandas as pd
import matplotlib.pyplot as plt

df_prog = pd.DataFrame({"Prognos tim": [2, 3, 3]})
df_prog.index = pd.date_range(start='2020-01-01 00', end='2020-01-01 02', freq='H')
df_prog.index = df_prog.index + pd.Timedelta(minutes=30)

_, ax = plt.subplots()
df_prog.index = df_prog.index.astype(str)
df_prog.plot(kind='line', linestyle='-', marker='o', color='r', ax=ax)
df_prog.plot(kind='bar', ax=ax)

plt.show()

enter image description here

答案 1 :(得分:0)

您缺少 line plot function 中的 ax=axuse_index=False 参数。这将在与条形相同的图中绘制线条,并防止线条图使用 x 轴的时间戳。相反,x 轴单位将从零开始,就像条形图一样,以便线条与条形对齐。无需转换索引,无需matplotlib。

import pandas as pd # v 1.1.3

# Create sample dataset
idx = pd.date_range(start='2020-01-01 00:30', periods=3, freq='60T')
df_prog = pd.DataFrame({"Prognos tim": [2, 3, 3]}, index=idx)

# Combine pandas line and bar plots
ax = df_prog.plot.bar(figsize=(8,5))
df_prog.plot(use_index=False, linestyle='-', marker='o', color='r', ax=ax)

# Format labels
ax.set_xticklabels([ts.strftime('%H:%M') for ts in df_prog.index])
ax.figure.autofmt_xdate(rotation=0, ha='center')

pd_line_bar_plot


如果省略 use_index=False 参数,则条形和线条仍会绘制在同一个图形中,只是 x 范围限制在您创建的第二个图中。例如,您可以在这里看到:

ax = df_prog.plot.bar(figsize=(8,5))
df_prog.plot(linestyle='-', marker='o', color='r', ax=ax) # plot line in bars plot
ax.set_xlim(-0.5,2.5); # the bars are here
# ax.set_xlim(26297300, 26297450); # the line is here, the values are pandas period units

pd_line_bar_xlim