數據分析系列章節(二):matplotlib

1.import struct庫

1.1 struct模塊:

在Python中,『一切皆對象』,基本數據類型也不列外
C語言的數組int a[3] = {1, 2, 4};存儲的是真正的值
Python的列表list = [1, 2, 4],存儲的是元素的指針

1.2 pack(),unpack()函數:

      由於計算機是用二進制來存儲和處理數字,不能精確表示浮點數,而JavaScript中沒有相應的封裝類來處理浮點數運算,直接計算會導致運算精度丟失。struct模塊最重要的兩個函數就是pack()、unpack()方法:打包函數:pack(fmt, v1, v2, v3, …);解包函數:unpack(fmt, buffer),其中,fmt是格式字符(format的諧音),struct模塊支持的格式化字符如下表

2.matplotlib庫

    在python的matplotlib庫中分別可用bar、barh、plot函數來構建它們,再使用xticks與yticks(設置座標軸刻度)、xlabel與ylabel(設置座標軸標籤)、title(標題)、legend(圖例)、xlim與ylim(設置座標軸數據範圍)、grid(設置網格線)等命令來裝飾圖形

2.1導入庫文件

    from matplotlib import pyplot as plt
    import numpy as np

2.2 簡單figure圖像生成案例:

# 使用import導入模塊matplotlib.pyplot,並簡寫成plt 使用import導入模塊numpy,並簡寫成np
from matplotlib import pyplot as plt
import numpy as np
import matplotlib

# 使用np.linspace定義x:範圍是(-1,1);個數是50
x = np.linspace(-1, 1, 50)
# 函數y=x^3
y = x ** 3
y1 = x ** 2
# 使用plt.figure定義一個圖像窗口.num代表圖像窗口編號,figsize表示窗口大小
plt.figure(num=3, figsize=(8, 5), )

# 使用plt.plot畫(x ,y1)曲線,曲線的顏色屬性(color)爲紅色;
# 曲線的寬度(linewidth)爲1.0;曲線的類型(linestyle)爲虛線. 使用plt.show顯示圖像

plt.plot(x, y1, color='red', linewidth='1.0', linestyle='--')
# 使用plt.plot畫(x ,y1)曲線.
plt.plot(x, y)
# 展示繪製圖像
plt.show()

2.3座標軸以及line:

2.3.1 設置座標軸不同的名字、刻度以及範圍:
# 使用plt.xlim設置x座標軸範圍:(-2, 2)
plt.xlim((-2,2))
# 使用plt.ylim設置x座標軸範圍:(-2, 2)
plt.ylim((-2,2))
# 定義x軸名稱
plt.xlabel('x軸')
# 定義y軸名稱
plt.ylabel('y軸')

new_ticks = np.linspace(-2, 2, 5)
print(new_ticks)
# 使用plt.xticks設置x軸刻度:範圍是(-2,2);個數是8.
plt.xticks(new_ticks)

# 使用plt.yticks設置y軸刻度以及名稱:刻度爲[-2, -1.8, -1, 1.22, 3]
# 對應刻度的名稱爲[‘really bad’,’bad’,’normal’,’good’, ‘really good’]
plt.yticks([-2, -1.8, -1, 1.22, 2],[r'$really\ bad$', r'$bad$', r'$normal$', r'$good$', r'$really\ good$'])
2.3.2 座標軸移至中心:
"""
plt.gca獲取當前座標軸信息. 使用.spines設置邊框;使用.set_color設置邊框顏色
"""
# 座標軸中移:
ax = plt.gca()
# 隱藏上邊和右邊
ax.spines['top'].set_color('none')
ax.spines['right'].set_color('none')
# 移動另外兩個軸
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data', 0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))
2.3.3 圖例legend
# set line syles
l1, = plt.plot(x, y1, label='linear line')
l2, = plt.plot(x, y2, color='red', linewidth=1.0, linestyle='--', label='square line')
# legend將要顯示的信息來自於上面代碼中的 label(表示圖例的名稱). 所以我們只需要簡單寫下一下代碼, plt 就能自動的爲我們添加圖例.
# 圖例展示
plt.legend(loc='upper right') # loc屬性表示圖例放置位置:upper,right,bottom,left
2.3.4 annotate標註
# 標註具體某點
x0 = 0.5
y0 = x0**2
plt.plot([x0, x0,], [0, y0,], 'k--', linewidth=2.5)
# set dot styles
plt.scatter([x0, ], [y0, ], s=50, color='b')

# 註釋annotate,對(x0,y0)這個點進行標註
plt.annotate(r'$x**2=%s$' % x0, xy=(x0, y0), xycoords='data', xytext=(+10, -10),
             # xytext=(+10, -10) 和 textcoords='offset points' 對於標註位置的描述 和 xy 偏差值
             textcoords='offset points', fontsize=10,
             arrowprops=dict(arrowstyle='->', connectionstyle="arc3,rad=.2"))

matplotlib的顏色及線條控制(linestyle,color)

linestyle:


'-'       solid line style
'--'      dashed line style
'-.'      dash-dot line style
':'       dotted line styl

color:【參考此篇文章】

多圖分區展示

語法格式:subplot(a,b,c)表示a行,b列,第c個圖像區域

from matplotlib import pyplot as plt
import numpy as np

# 規則圖形:

# 創建一個圖形窗口
plt.figure()
# subplot(m,n,x):代表創建m*n個小圖,x代表第i個圖
plt.subplot(2, 2, 1)
# 繪製折線圖
x = [1, 2, 3, 4, 5, 6]
y = [3, 5, 7, 8, 1, 2]
plt.plot(x, y)

# plt.subplot(2,2,2)表示將整個圖像窗口分爲2行2列, 當前位置爲2
plt.subplot(2, 2, 2)
data = np.arange(1, 4, .25)
plt.scatter(data, data)

# plt.subplot(2,2,3)表示將整個圖像窗口分爲2行2列,當前位置爲3
plt.subplot(223)
plt.plot([0, 1], [0, 3])

# plt.subplot(2,2,4)表示將整個圖像窗口分爲2行2列,當前位置爲4
plt.subplot(2, 2, 4)
plt.plot([0, 1], [3, 3])

plt.show()

plt.text()給圖形添加數據標籤

import matplotlib.pyplot as plt
import numpy as np
#創建帶數字標籤的直方圖
numbers = list(range(1,11))
#np.array()將列表轉換爲存儲單一數據類型的多維數組
x = np.array(numbers)
y = np.array([a**2 for a in numbers])
plt.bar(x,y,width=0.5,align='center',color='c')
plt.title('Square Numbers',fontsize=24)
plt.xlabel('Value',fontsize=14)
plt.ylabel('Square of Value',fontsize=14)
plt.tick_params(axis='both',labelsize=14)
plt.axis([0,11,0,110])
for a,b in zip(x,y):
    # 用%.2f保留兩位小數,橫向居中對齊ha='center',縱向底部(頂部)對齊va='bottom'
    plt.text(a,b+0.1,'%.2f'%b,ha = 'center',va = 'bottom',fontsize=7)
plt.savefig('images\squares.png')
plt.show()

    首先,前邊設置的x、y值其實就代表了不同柱子在圖形中的位置(座標),通過for循環找到每一個x、y值的相應座標——a、b,再使用plt.text在對應位置添文字說明來生成相應的數字標籤,而for循環也保證了每一個柱子都有標籤。其中,a+0.5, b+0.05(表示位置高度)表示在每一柱子對應x值、y值上方0.05處標註文字說明,’%.2f’ % b,代表標註的文字,即每個柱子對應的y值,其中0表示不顯示小數後面的數值,1就表示顯示小數後面一位,以此類推; ha=‘center’, va= 'bottom’代表horizontalalignment(水平對齊)、verticalalignment(垂直對齊)的方式,fontsize則是文字大小。條形圖、折線圖也是如此設置,餅圖則在pie命令中有數據標籤的對應參數。對於累積柱狀圖、雙軸柱狀圖則需要用兩個for循環,同時通過a與b的不同加減來設置數據標籤位置。

3.圖形

未完待續:
-3.1 散點圖
-3.2 柱形圖

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章