1 回答
TA贡献1719条经验 获得超6个赞
一种方法是将日期设置为索引。然后,执行reindex()从第一个到最后一个日期的所有日期。这将填写'NaN'(“不是数字”或“不可用”)对应于缺失日期的数据。NaN值通常会在绘制的数据中创建一个空白点。
我不知道ls='steps'matplotlib 中的选项plot(),但有一个类似的选项step()可以创建步骤图。(在 matplotlib 之上,pandas 和 seaborn 还构建了一些接口来创建这种和许多其他类型的绘图。)
顺便说一句,当在同一个地方绘制多个图形时,重复使用同一个图形通常效果最好ax。plt.subplots()是通过一次调用创建图窗和子图(默认 1 行 1 列)的简便方法。可以设置许多选项,其中figsize.
import pandas as pd
from matplotlib import pyplot as plt
from matplotlib import dates as mdates
from io import StringIO
data_str = ''' Date Central_SMA Bottom_Central_SMA Top_Central_SMA
0 2020-06-02 97.891667 97.7125 98.070833
1 2020-06-03 98.833333 98.9250 98.741667
2 2020-06-04 98.516667 98.4625 98.570833
3 2020-06-05 98.175000 98.0000 98.350000
4 2020-06-08 98.633333 98.5000 98.766667'''
Graph = pd.read_csv(StringIO(data_str), delim_whitespace=True)
Graph['Date'] = pd.to_datetime(Graph['Date']) # just making sure the 'Date' really is in pandas date format
Graph.set_index('Date', inplace=True)
Graph = Graph.reindex(index=pd.date_range(start=Graph.index[0], end=Graph.index[-1], freq='D'))
fig, ax = plt.subplots(figsize=(12, 5))
ax.step(Graph.index, Graph['Central_SMA'], label='Central SMA')
ax.step(Graph.index, Graph['Top_Central_SMA'], label='Top SMA')
ax.xaxis_date()
ax.xaxis.set_major_formatter(mdates.DateFormatter('%d-%m-%Y'))
ax.legend()
plt.show()
添加回答
举报