为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕森王 2023-06-13 15:19:05
我有一个名为 Graph 的数据框,我在下面附上了我的结果图    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下面的代码将计算图形,但 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 matplotlibmatplotlib.rc('figure', figsize=[100,20])plt.show()
查看完整描述

1 回答

?
慕侠2389804

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()

//img1.sycdn.imooc.com//648818960001687511370417.jpg

查看完整回答
反对 回复 2023-06-13
  • 1 回答
  • 0 关注
  • 80 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信