Python簡單作二維統計圖

先上一張效果圖: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

https://matplotlib.org/users/pyplot_tutorial.html

http://bbs.csdn.net/topics/390705164?page=1

相關文章
相關標籤/搜索