我正在阅读下一格式有两列的文本文件:
20120101 5.6
20120102 5.3
20120103 5.4
...
第一列是YYYYMMDD
个月的第二列,第二列是一个数量级。
这是我到目前为止所做的事情:
file = open('junk.txt','r')
lines = file.readlines()
file.close()
Magnitude=[]
Year=[]
for line in lines:
p=line.split()
Year.append(str(p[0]))
Magnitude.append(float(p[5]))
year = np.array(Year, dtype='datetime64[Y]')
mag=np.array(Magnitude)
fig2 = plt.figure()
ax2 = fig2.add_subplot(1,1,1)
ax2.plot_date(year, Cmag, color='k',linestyle='-',linewidth=2.0)
ax2.set_xlabel('Number of Events')
ax2.set_ylabel('Cumulative Moment')
然而, x
轴(时间)的格式不正确。我想以yyymm
轴中的 x
格式显示时间。
这是我输出的链接(图):
https://drive.google.com/a/ucsc.edu/file/d/0B3Y1nDlkfy2VNjlBS2FrT0ZRWW8/view?usp=sharing
您可以看到无法正确识别时间。
答案 0 :(得分:0)
matplotlib
有一个特殊的日期时间值(处理和格式化)所以,一个两步的故事来让'PLOT真的很好
从datetime
到matplotlib
约定兼容 float
的日期/时间
像往常一样, devil 会被隐藏起来。
matplotlib
日期 几乎 相等,但不等于:
# mPlotDATEs.date2num.__doc__
#
# *d* is either a class `datetime` instance or a sequence of datetimes.
#
# Return value is a floating point number (or sequence of floats)
# which gives the number of days (fraction part represents hours,
# minutes, seconds) since 0001-01-01 00:00:00 UTC, *plus* *one*.
# The addition of one here is a historical artifact. Also, note
# that the Gregorian calendar is assumed; this is not universal
# practice. For details, see the module docstring.
因此,强烈建议重新使用他们的“自己的”工具:
from matplotlib import dates as mPlotDATEs # helper functions num2date()
# # and date2num()
# # to convert to/from.
matplotlib
也为这部分带来了武器。
from matplotlib.dates import DateFormatter, \
AutoDateLocator, \
HourLocator, \
MinuteLocator, \
epoch2num
from matplotlib.ticker import ScalarFormatter, FuncFormatter
aPlotAX.xaxis.set_major_formatter( DateFormatter( '%Y%m' ) ) # OUGHT WORK