matplotlib繪製圖形四板斧

前言

去年的時候寫了一篇關於matplotlib的幾種常用畫圖方法,今天偶然當時寫的文章覺得還是仍有許多要改進的地方,花了一個下午的時間又重新整理了下,廢話少說,直接開始。

什麼是Matplotlib

Matplotlib是是個Python 2D繪圖庫,它可用於Python腳本、Python Shell、Jupyter筆記本,Web應用程序服務器和四個圖形用戶界面工具包,說了一堆廢話,我自己也沒搞明白到底要說啥,換句人話呢就是一個繪製圖形的工具,例如可以繪製日常見的條形圖、折線圖、扇形圖等。 

學習Matplotlib的用處

1、可以做數據處理的可視化輔助工具,能夠清晰的理解數據,從而幫助調整分析方法。                                                                2、能夠將數據直觀呈現出來,使數據更加客觀,更具有說服力。

常見圖形繪製方法

        折線圖繪製

折線的顏色和形狀設置

設置圖片大小和保存圖片

繪製X軸和Y軸的刻度

設置中文顯示

 一圖多個座標系子圖

 設置座標軸範圍

改變座標軸的默認顯示方式

 繪製散點圖

繪製條形圖

豎向條形圖

橫向條形圖

並列和羅列條形圖

繪製餅狀圖


 

折線圖繪製

首先在進行圖形繪製前需要導入相關的庫,在這裏我們使用fmatplotlib中的pyplo來進行圖像繪製,方法確定後還需要確定x,y軸的大小、刻度值、折線的寬度、折線的樣式、顏色、標題等等,這裏呢就不一一具體詳細描述了,有興趣的可以自己去官網查看https://matplotlib.org/

#導入
import matplotlib.pyplot as plt
#繪製折線 
plt.plot([1,0,9],[4,5,6])
plt.show()

運行結果:

這樣看的話,是不是柑橘光禿禿的呢,一點都不美觀呢,那接下來我們對其進行深一步的編輯、渲染。

折線的顏色和形狀設置

from matplotlib import pyplot as plt

#1、確定x,y軸位置
x = range(1,8)
y = (2,4,6,9,4,17,14)

#2傳入x,y值,通過plot方法繪製折線圖
#color 代表顏色,alpah代表透明度,linestyle代表先的樣式,linewidth代表線寬度,marker代表折點樣式,markersize代表折點大小,markeredgecolor代表折點邊框顏色
plt.plot(x,y,color = 'red',alpha = 0.5,linestyle = '--',linewidth = 3,marker='o',markersize = '20',
        markeredgecolor = 'green',markeredgewidth = 5)

#3 展示圖形
plt.show()

運行結果:

設置圖片大小和保存圖片

#圖片的保存
from matplotlib import pyplot as plt
import random

x = range(2,26,2)
y = [random.randint(15,30) for i in x]

plt.figure(figsize=(20,8),dpi=80) #figsize代表畫布的大小,dpi代表繪製的圖像的分辨率
plt.plot(x,y)
plt.savefig('./t1.png')   #保存圖片,圖片的形式也可以保存爲svg這種矢量圖格式,還有plt.savefig要放在plt.show前面,否則的話保存的圖片會是一個空白。
#plt.show()

繪製X軸和Y軸的刻度

在繪製圖形時,我們還需要對x軸和y軸的刻度單位進行設置,不然的話,給我們一張折線圖我們並不知道x,y軸各代表的什麼意思,這裏我們需要用到plt.xticks和plt.yticks來設置,給大家看一下代碼演示。

from matplotlib import pyplot as plt
import random

x = range(2,26,2)
y = [random.randint(15,30) for i in x]

plt.figure(figsize=(20,8),dpi=80)

#設置x軸刻度的疏密程度
#plt.xticks(x)
#plt.xticks(range(1,25))

#構造X軸標籤
x_table = ["{}:00".format(i) for i in x]    
#x代表疏密程度,x_table代表刻度名稱
plt.xticks(x,x_table,rotation = 45)   

#設置y軸
y_table = ["{}:d°".format(i) for i in range(min(y),max(y)+1)] 
#y代表疏密程度,y_table代表刻度名稱
plt.yticks(range(min(y),max(y)+1),y_table,rotation = 45)

plt.plot(x,y)
plt.show()

運行結果:

設置中文顯示

在繪製的圖形中,我們中國人的標題內容都是中文,但是matplotlib是不支持的,在這裏我們需要使用matplotlib 中的font_manager方法來進行設置,代碼如下:

#設置中文
from matplotlib import pyplot as plt
import random

x = range(0,120)
y = [random.randint(15,30) for i in x]

plt.figure(figsize=(20,8),dpi=80)
plt.plot(x,y)

#設置圖片標題
from matplotlib import font_manager
#設置中文標題,字號18
my_font = font_manager.FontProperties(fname='C:\Windows\Fonts\simhei.ttf',size=18)
plt.title('圖片',fontproperties = my_font)


#x軸辯題
plt.xlabel('時間',fontproperties = my_font)
#y軸標題
plt.ylabel('溫度',fontproperties = my_font)
plt.show()

運行結果:

 一圖多個座標系子圖

#一圖多個座標系子圖
from matplotlib import pyplot as plt 
import numpy as np
x = np.arange(1,100)

#新建figure
fig = plt.figure(figsize=(20,10),dpi = 80)
#新建子圖1,add_subplot中的2,2代表將畫布分成2*2等分,即可以畫4個子圖
ax1 = fig.add_subplot(2,2,1)
ax1.plot(x,x)
#新建子圖2
ax2 = fig.add_subplot(2,2,2)
ax2.plot(x,x**2)
ax2.grid(color = 'r',linestyle = '--',linewidth = 1,alpha = 0.3)
#新建子圖3
ax3 = fig.add_subplot(2,2,3)
ax3.plot(x,np.log(x))
plt.show()

運行結果:

 設置座標軸範圍

#設置座標軸範圍
from matplotlib import pyplot as plt 
import numpy as np

x = np.arange(-10,11,1)
y = x**2
plt.plot(x,y)
#調整x軸的左右兩邊
#plt.xlim([-5,5])
#只調一邊,只顯示x軸-4到4時y軸對應的值
# plt.xlim(xmin=-4)
# plt.xlim(xmax = 4)
#只調一邊
plt.ylim(ymin = 0)
plt.xlim(xmin = 0)
plt.show()

 運行結果:

改變座標軸的默認顯示方式

#改變座標軸的默認顯示方式
from matplotlib import pyplot as plt 
import numpy as np

x = range(0,14,2)
y = [-3,-2,-1,0,1,2,3]
plt.figure(figsize=(20,8),dpi=80)
#plt.plot(x,y)
#獲得當前圖表的圖像
ax = plt.gca()

#設置圖形的包圍線
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.spines['left'].set_color('red')
ax.spines['bottom'].set_color('black')

#設置底邊的移動範圍,移動到y軸的0位置,‘data’:移動軸的位置到交叉軸的指定座標
#ax.spines['bottom'].set_position(('data',0))
ax.spines['left'].set_position(('data',0))
plt.plot(y,x)

plt.show()

運行結果:

繪製散點圖

from matplotlib import pyplot as plt
from matplotlib import font_manager

y = [11,17,16,11,12,13,14,12,16,17,17,18,14,19,22,16,18,19,24,22,25,16,18,15,22,19,20,22,15,18,24]
x = range(1,32)

#設置圖像大小
plt.figure(figsize=(20,8),dpi=80)
#使用散點圖繪製圖形
plt.scatter(x,y,label = '3月份')
#調整x軸刻度

my_font = font_manager.FontProperties(fname='C:\Windows\Fonts\simhei.ttf',size=18)
x_tickes = ['3月{}號'.format(i) for i in x]
plt.xticks(x[::3],x_tickes[::3],fontproperties = my_font,rotation = 45)
plt.xlabel('日期',fontproperties = my_font)
plt.ylabel('溫度',fontproperties = my_font)
plt.legend(prop = my_font)
plt.show()

運行結果:

 

繪製條形圖

豎向條形圖

#繪製條形圖
from matplotlib import pyplot as plt
import numpy as np
from matplotlib import font_manager

a = ['流浪地球','瘋狂的外星人','飛馳人生','大黃蜂','熊出沒*原始時代','新喜劇之王']
b = ['38.13','19.85','14.89','11.36','6.47','5.93']
my_font = font_manager.FontProperties(fname='C:\Windows\Fonts\simhei.ttf',size=18)
plt.figure(figsize=(20,8),dpi=80)

#繪製條形圖
rects = plt.bar(range(len(a)),[float(i) for i in b],width = 0.3,color = ['r','g','b','r','g','b'])
plt.xticks(range(len(a)),a,fontproperties = my_font)
plt.yticks(range(0,41,5),range(0,41,5))
                
#在條形圖上加備註(水平居中)
for rect in rects:
    height = rect.get_height()
    plt.text(rect.get_x() + rect.get_width() / 2,height + 0.3,str(height),ha = 'center')
plt.show()

運行結果:

 

橫向條形圖

#橫向條形圖
#繪製條形圖
from matplotlib import pyplot as plt
import numpy as np
from matplotlib import font_manager

a = ['流浪地球','瘋狂的外星人','飛馳人生','大黃蜂','熊出沒*原始時代','新喜劇之王']
b = ['38.13','19.85','14.89','11.36','6.47','5.93']
my_font = font_manager.FontProperties(fname='C:\Windows\Fonts\simhei.ttf',size=18)
plt.figure(figsize=(20,8),dpi=80)

#繪製橫向的條形圖
#plt.bar(b,a)
rects = plt.barh(range(len(a)),b,height = 0.5,color = 'r')
plt.yticks(range(len(a)),a,fontproperties = my_font,rotation = 45)

#在條形圖上加標註(水平居中)
for rect in rects:
    width = rect.get_width()
    #print(width)
    plt.text(width,rect.get_y()+0.3/2,str(width),va = 'center')
plt.show()

運行結果:

並列和羅列條形圖

from matplotlib import pyplot as plt
import numpy as np

index = np.arange(4)
print(index)
BJ = [50,55,53.,60]
SH = [44,66,55,41]

#並列
plt.bar(index,BJ,width = 0.3)
# plt.bar(index + 0.3 ,SH,width=0.3,color = 'green')
# plt.xticks(index + 0.3/2,index)
#羅列
plt.bar(index,SH,bottom=BJ,width = 0.3,color = 'green')
plt.show()

運行結果:

繪製餅狀圖

#餅狀圖
from matplotlib import pyplot as plt
import numpy as np
from matplotlib import font_manager
my_font = font_manager.FontProperties(fname='C:\Windows\Fonts\simhei.ttf',size=10)


label_list = ['第一部分','第二部分','第三部分']
size = [55,35,10]
color = ['red','green','blue']
explode = [0,0.05,0]
plt.figure(figsize=(20,8),dpi=80)
patches,l_text,p_text = plt.pie(size,explode=explode,colors=color,labels=label_list,labeldistance=1.1,autopct="%1.1f%%",shadow=False,
                               startangle=90,pctdistance=0.6)

for t in l_text:
   # print(dir(t))
    t.set_fontproperties(my_font)
    
for i in l_text:
    t.set_size(18)

for i in patches:
    i.set_color('pink')
    break
    
plt.legend(prop = my_font,loc = 'upper right')
#plt.savefig('./t2.jpg')
plt.show()

運行結果:

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