使用日期格式Matplotlib格式化X轴 [英] Formatting X axis with dates format Matplotlib

查看:75
本文介绍了使用日期格式Matplotlib格式化X轴的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我编写了一段代码,该代码绘制了用户确定的股票市场随时间推移的过去7天的股票价值.我的问题是我想将x轴设置为 YYMMDD 格式.我也不明白 2.014041e7 在x轴末端的含义.

I have written code which plots the past seven day stock value for a user-determined stock market over time. The problem I have is that I want to format the x axis in a YYMMDD format. I also don't understand what 2.014041e7 means at the end of the x axis.

x的值为:

20140421.0, 20140417.0, 20140416.0, 20140415.0, 20140414.0, 20140411.0, 20140410.0

y的值是:

531.17, 524.94, 519.01, 517.96, 521.68, 519.61, 523.48

我的代码如下:

mini = min(y)
maxi = max(y)
minimum = mini - 75
maximum = maxi + 75
mini2 = int(min(x))
maxi2 = int(max(x))

plt.close('all')
fig, ax = plt.subplots(1)
pylab.ylim([minimum,maximum])
pylab.xlim([mini2,maxi2])

ax.plot(x, y)
ax.plot(x, y,'ro')
ax.plot(x, m*x + c)
ax.grid()
ax.plot()

推荐答案

使用方法绘制数据时,您只需将 y 数据与 x中的数字(浮点数)进行绘制例如 20140421.0 (我想您希望表示的日期为2014年4月21日).

When plotting your data using your method you are simply plotting your y data against numbers (floats) in x such as 20140421.0 (which I assume you wish to mean the date 21/04/2014).

您需要将这些浮点数中的数据转换为适合matplotlib理解的格式.下面的代码将您的两个列表(x,y)进行转换.

You need to convert your data from these floats into an appropriate format for matplotlib to understand. The code below takes your two lists (x, y) and converts them.

import numpy as np

import matplotlib.pyplot as plt
import matplotlib.dates as mdates

import datetime as dt

# Original data

raw_x = [20140421.0, 20140417.0, 20140416.0, 20140415.0, 20140414.0, 20140411.0, 20140410.0]
y = [531.17, 524.94, 519.01, 517.96, 521.68, 519.61, 523.48]

# Convert your x-data into an appropriate format.

# date_fmt is a string giving the correct format for your data. In this case
# we are using 'YYYYMMDD.0' as your dates are actually floats.
date_fmt = '%Y%m%d.0'

# Use a list comprehension to convert your dates into datetime objects.
# In the list comp. strptime is used to convert from a string to a datetime
# object.
dt_x = [dt.datetime.strptime(str(i), date_fmt) for i in raw_x]

# Finally we convert the datetime objects into the format used by matplotlib
# in plotting using matplotlib.dates.date2num
x = [mdates.date2num(i) for i in dt_x]

# Now to actually plot your data.
fig, ax = plt.subplots()

# Use plot_date rather than plot when dealing with time data.
ax.plot_date(x, y, 'bo-')

# Create a DateFormatter object which will format your tick labels properly.
# As given in your question I have chosen "YYMMDD"
date_formatter = mdates.DateFormatter('%y%m%d')

# Set the major tick formatter to use your date formatter.
ax.xaxis.set_major_formatter(date_formatter)

# This simply rotates the x-axis tick labels slightly so they fit nicely.
fig.autofmt_xdate()

plt.show()

该代码在全文中都已注释,因此应易于说明.各个模块的详细信息可以在下面找到:

The code is commented throughout so should be easily self explanatory. Details on the various modules can be found below:

  1. datetime
  2. matplotlib.dates

这篇关于使用日期格式Matplotlib格式化X轴的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆