先上一張效果圖:html
以上圖是一段時間內黃金價格的波動圖。segmentfault
代碼以下:數組
import datetime as DT from matplotlib import pyplot as plt from matplotlib.dates import date2num data = [] with open("data.txt") as my_file: for line in my_file: date, price = line.partition("@")[::2] data.append((DT.datetime.strptime(date, "%Y-%m-%d %H:%M:%S"), price)) d = [date for (date, value) in data[::8]] x = [date2num(date) for (date, value) in data] y = [value for (date, value) in data] fig = plt.figure() graph = fig.add_subplot(111) # Plot the data as a red line with round markers # graph.plot(x, y, 'r-o') graph.plot(x, y) # Set the xtick locations to correspond to just the dates you entered. graph.set_xticks(x) # Set the xtick labels to correspond to just the dates you entered. graph.set_xticklabels( [date.strftime("%Y-%m-%d %H:%M:%S") for date in d], rotation=30 ) # plt.grid(True) plt.xticks(x[::8]) # print [x[f_value] for f_value in range(0, len(x), 8)] plt.show()
data.txt數據格式以下:app
2017-07-29 00:00:02@27567 2017-07-29 03:00:02@27575 2017-07-29 06:00:01@27575 2017-07-29 09:00:01@27575 2017-07-29 12:00:02@27575 2017-07-29 15:00:01@27575 2017-07-29 18:00:01@27575 2017-07-29 21:00:01@27575
相關知識點介紹:spa
matplotlib中整個圖像是一個Figure對象,在Figure對象中能夠包含一個,或者多個Axes對象。每一個Axes對象都是一個擁有本身座標系統的繪圖區域,多個Axes對象能夠繪成一個比較複雜的圖,好比共用x-axis的圖。其邏輯關係以下:.net
一個具體的圖以下:code
Title爲標題。Axis爲座標軸,Label爲座標軸標註。Tick爲刻度線,Tick Label爲刻度註釋,須要注意的是x-axis的ticks(刻度)和x-axis的ticklabels是分開的,ticks就表明x軸的數據,ticklabels表示數據對應的字符串。並非每一個刻度都有字符串對應,ticklabels的密度是能夠控制的。每每很密集的刻度會對應合理的字符串便以閱讀。htm
第一個圖的x-axis軸對應的是日期,可是x軸必須有數據,所以matplotlib.dates提供了將日期轉化爲數據的方法date2num, 這個例子中數據是每3小時有一條,可是顯示的時候只到天,具體是以下兩行代碼:對象
#每8個取一個日期,其實就是一天 d = [date for (date, value) in data[::8]] #每一個日期對應一個值,這樣才能定位日期的位置,所以值也是每8個取一個 plt.xticks(x[::8])
獲取x軸和y軸的刻度值blog
x = [date2num(date) for (date, value) in data] y = [value for (date, value) in data]
建立圖像並設置圖像位置
fig = plt.figure()
graph = fig.add_subplot(111)
111的意思是把figure也就是圖像分紅1行1列,放在第一個格子,也就是獨佔整個圖像
#把數據畫到圖上,r是red的意思,線是紅色的,o表示對各個值畫一個點。 # graph.plot(x, y, 'r-o') #默認藍線不畫點 graph.plot(x, y)
# Set the xtick labels to correspond to just the dates you entered. #設置x軸label,其實就是上面算好的d日期字符串數組,rotation是label的角度 graph.set_xticklabels( [date.strftime("%Y-%m-%d %H:%M:%S") for date in d], rotation=20 )
#圖表顯示網格 plt.grid(True) #設置圖標的標題 plt.title("Gold price trends") plt.xticks(x[::8]) #設置y軸label plt.ylabel('Gold price/RMB cents') #設置x軸label plt.xlabel('Date time') #顯示圖像 plt.show()
這麼下來一個簡單的圖表就畫好了,很快很實用吧。
參考連接:
http://www.javashuo.com/article/p-szqehkid-ex.html