python實戰學習之matplotlib繪圖


matplotlib 是最流行的Python底層繪圖庫,主要做數據可視化圖表 可以將數據可視化,能夠更直觀的呈現數據

matplotlib繪圖基本要點

首先實現一個簡單的繪圖

# 導入pyplot
from matplotlib import pyplot as plt
x = range(1,13)
y = [15,13,14.5,17,20,25,26,26,27,22,18,15]
# 傳入x和y,通過plot繪制折現
plt.plot(x,y)
# 展示繪圖
plt.show()

更多屬性設置

  • 設置圖片大小

fig = plt.figure(figsize=(20,8),dpi=80)
通過實例化一個figure並且傳遞參數,能夠在后台自動使用該figure
在圖像模糊的時候可以傳入dpi參數,讓圖片更加清晰

  • 保存到本地

plt.savefig(path) #path 圖片的保存路徑

  • 中文設置

my_font = font_manager.FontProperties(fname=r"c:\windows\fonts\simsun.ttc")
matplotlib默認不支持中文字符,因為默認的英文字體無法顯示漢字
設置中文字體(指定具體的字體文件路徑,然后再需要顯示中文的地方添加fontproperties參數)

  • x軸,y軸,圖表的描述信息

plt.xlabel("時間",fontproperties=my_font)
plt.ylabel("溫度",fontproperties=my_font)
plt.title("一天的溫度的變化",fontproperties=my_font)

  • 調整x或者y的刻度的間距

plt.xticks(x) #刻度設置 傳入的是列表x的數據
plt.xticks(x[::2]) #調整刻度 每間隔兩個輸出一個
x_ticks = ["第{}個".format(i) for i in x]
讓列表X中的數據和x_ticks上的數據都傳入,最終會在x軸上一一對應顯示出來 兩組數據的長度必須一樣
plt.xticks(x[::5],x_ticks[::5],rotation=45,fontproperties=my_font)
為了不讓字符串重疊覆蓋,使用rotation進行旋轉rotation=45

  • 線條的樣式(比如顏色,透明度等)

plt.plot(x,label = "數據",linestyle="-",color="red",alpha=0.5)
linestyle 設置線條的樣式
linewidth 設置線條的粗細
color設置線條的顏色
alpha = 0.5 設置線條的透明度
plt.legend(prop=my_font,loc="best")#通過plot函數的label設置圖例
prop 設置圖例的字體
loc 設置圖例的位置 默認為右上角

  • 添加網格

plt.grid()

  • 標記出特殊的點(比如最高點和最低點)

獲取最大值最小值的索引
max_indx=y.index(max(y))
設置最大值
plt.plot(x[max_indx],y[max_indx],'ks')
顯示最大值
show_max='['+str(x[max_indx])+','+str(y[max_indx])+']'
plt.annotate(show_max,xytext=(x[max_indx],y[max_indx]),xy=(x[max_indx],y[max_indx]))

  • 給圖片添加一個水印(防偽,防止盜用)

添加水印
fig.text(0.75, 0.45, 'hello world',
fontsize=40, color='gray',
ha='right', va='bottom', alpha=0.4)

折線圖實例

from matplotlib import pyplot as plt
# import random
from matplotlib import font_manager
#matplotlib默認不支持中文字符,因為默認的英文字體無法顯示漢字
#設置中文字體(指定具體的字體文件路徑,然后再需要顯示中文的地方添加fontproperties參數)
my_font = font_manager.FontProperties(fname=r"c:\\windows\\fonts\\simsun.ttc")

#figure圖形圖標的意思在這里指的就是我們畫的圖
#通過實例化一個figure並且傳遞參數,能夠在后台自動使用該figure實例
#在圖像模糊的時候可以傳入dpi參數,讓圖片更加清晰
fig = plt.figure(figsize=(15,6),dpi=80)
#數據在x軸的一個位置,是一個可迭代對象
x = range(2,26,2)
#數據在y軸的一個位置
y = [15,13,14.5,17,20,25,26,26,27,22,18,15]
# 獲取最大值最小值的索引
max_indx=y.index(max(y))
min_indx=y.index(min(y))
#傳入x和y,通過plot繪制折線圖
#設置線條樣式,顏色,透明度
plt.plot(x,y,label = "溫度",linestyle="-.",color="red",alpha=0.5)
#通過plot函數的label設置圖例 
plt.legend(prop=my_font,loc="best")
# 設置最大值
plt.plot(x[max_indx],y[max_indx],'ks')
# 顯示最大值
show_max='['+str(x[max_indx])+','+str(y[max_indx])+']'
plt.annotate(show_max,xytext=(x[max_indx],y[max_indx]),xy=(x[max_indx],y[max_indx]))
# 設置最小值
plt.plot(x[min_indx],y[min_indx],'gs')
# 顯示最小值
show_min='['+str(x[min_indx])+','+str(y[min_indx])+']'
plt.annotate(show_min,xytext=(x[min_indx],y[min_indx]),xy=(x[min_indx],y[min_indx]))
# 設置水印
fig.text(0.75, 0.45, 'hello world',
         fontsize=40, color='gray',
         ha='right', va='bottom', alpha=0.4)
# 設置x軸的刻度
x_ticks = ["X日{}點".format(i) for i in x]
plt.xticks(x,x_ticks,rotation=45,fontproperties=my_font)
# 設置x軸,y軸的標注,標題
plt.xlabel("時間",fontproperties=my_font)
plt.ylabel("溫度",fontproperties=my_font)
plt.title("一天的溫度的變化",fontproperties=my_font)
# 設置網格
plt.grid()
plt.show()

如下圖所示


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM