使用matplotlib

时间:2015-10-05 03:29:28

标签: python numpy matplotlib

我正在阅读下一格式有两列的文本文件:

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

您可以看到无法正确识别时间。

1 个答案:

答案 0 :(得分:0)

matplotlib 有一个特殊的日期时间值(处理和格式化)

所以,一个两步的故事来让'PLOT真的很好

enter image description here

第1步:将数据准备为适当的格式

datetimematplotlib约定兼容 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.

第2步:管理轴标签&格式化和比例(最小/最大)作为下一个问题

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

检查code in this answer for all details