Python 使用日期格式化X轴格式Matplotlib

Python 使用日期格式化X轴格式Matplotlib,python,date,datetime,matplotlib,plot,Python,Date,Datetime,Matplotlib,Plot,我编写了一段代码,用于绘制用户确定的股票市场过去七天的股票价值。 我遇到的问题是,我想以YYMMDD格式格式化x轴。 我也不明白x轴末端的2.014041e7是什么意思 x的值为: 20140421.0, 20140417.0, 20140416.0, 20140415.0, 20140414.0, 20140411.0, 20140410.0 531.17, 524.94, 519.01, 517.96, 521.68, 519.61, 523.48 y的值为: 20140421.0,

我编写了一段代码,用于绘制用户确定的股票市场过去七天的股票价值。 我遇到的问题是,我想以YYMMDD格式格式化x轴。 我也不明白x轴末端的
2.014041e7
是什么意思

x的值为:

20140421.0, 20140417.0, 20140416.0, 20140415.0, 20140414.0, 20140411.0, 20140410.0
531.17, 524.94, 519.01, 517.96, 521.68, 519.61, 523.48
y的值为:

20140421.0, 20140417.0, 20140416.0, 20140415.0, 20140414.0, 20140411.0, 20140410.0
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()

使用您的方法绘制数据时,您只需根据
x
中的数字(浮动)绘制
y
数据,例如
20140421.0
(我假设您希望指的是2014年4月21日)

您需要将这些浮动中的数据转换为适当的格式,以便matplotlib理解。下面的代码获取两个列表(x,y)并转换它们

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()
整个代码都有注释,因此应该很容易解释。有关各个模块的详细信息,请参见以下内容:


  • 使用您的方法绘制数据时,您只需将
    y
    数据与
    x
    中的数字(浮动)进行绘制,例如
    20140421.0
    (我假设您希望的日期是2014年4月21日)

    您需要将这些浮动中的数据转换为适当的格式,以便matplotlib理解。下面的代码获取两个列表(x,y)并转换它们

    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()
    
    整个代码都有注释,因此应该很容易解释。有关各个模块的详细信息,请参见以下内容:

  • 看看这里:看看这里: