猿问

在 Matplotlib Plot 中获取 x 轴的恒定间距/宽度时遇到问题?

我有一个名为 Graph 的数据框,我在下面附上了我的结果图


    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

下面的代码将计算图形,但 x 轴的宽度即在特定日期不是常数。如何使给定日期的间距保持不变?


Graph.reset_index(inplace=True)

Graph['Date'] = Graph['Date'].apply(date2num)

fig = plt.figure()

ax1 = fig.add_subplot(111)

ax2 = fig.add_subplot(111)

ax3 = fig.add_subplot(111)


ax1.xaxis_date()

ax1.xaxis.set_major_formatter(mdates.DateFormatter('%d-%m-%Y'))

ax2.plot(Graph.Date, Graph['Central_SMA'], label='Central SMA',ls='steps')

ax3.plot(Graph.Date, Graph['Top_Central_SMA'], label='Top SMA',ls='steps')


import matplotlib

matplotlib.rc('figure', figsize=[100,20])

plt.show()

慕森王
浏览 90回答 1
1回答

慕侠2389804

一种方法是将日期设置为索引。然后,执行reindex()从第一个到最后一个日期的所有日期。这将填写'NaN'(“不是数字”或“不可用”)对应于缺失日期的数据。NaN值通常会在绘制的数据中创建一个空白点。我不知道ls='steps'matplotlib 中的选项plot(),但有一个类似的选项step()可以创建步骤图。(在 matplotlib 之上,pandas 和 seaborn 还构建了一些接口来创建这种和许多其他类型的绘图。)顺便说一句,当在同一个地方绘制多个图形时,重复使用同一个图形通常效果最好ax。plt.subplots()是通过一次调用创建图窗和子图(默认 1 行 1 列)的简便方法。可以设置许多选项,其中figsize.import pandas as pdfrom matplotlib import pyplot as pltfrom matplotlib import dates as mdatesfrom io import StringIOdata_str = '''    Date    Central_SMA  Bottom_Central_SMA Top_Central_SMA0   2020-06-02  97.891667   97.7125         98.0708331   2020-06-03  98.833333   98.9250         98.7416672   2020-06-04  98.516667   98.4625         98.5708333   2020-06-05  98.175000   98.0000         98.3500004   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 formatGraph.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()
随时随地看视频慕课网APP

相关分类

Python
我要回答