matplotlib各圖形繪制


2D圖形

import numpy as np
import pandas as pd
from pandas import Series,DataFrame
import matplotlib.pyplot as plt

散點圖

【散點圖需要兩個參數x,y,但此時x不是表示x軸的刻度,而是每個點的橫坐標!】

scatter()

通過散點圖 可以研究 兩個特征之間的關系

x = np.random.normal(loc=0,scale=5,size=1000)
y = np.random.normal(loc=0,scale=5,size=1000)
# plt.plot()  # plot繪制的是折線圖
plt.scatter(x,y)  #  plt.scatter()繪制的是散點圖

plt.scatter(x,y,s=80,c='red')  # s size指的是散點的大小 c color指的是散點的顏色

size = np.random.randint(0,100,1000)
color = np.random.random(size=(1000,3))
# 給這1000個點 隨機產生 不同的 大小和顏色
plt.scatter(x,y,s=size,c=color,alpha=0.6,marker='*')
plt.axis('off')

餅圖

【餅圖也只有一個參數x!】

pie() 餅圖適合展示各部分占總體的比例,條形圖適合比較各部分的大小

普通各部分占滿餅圖

data = np.array([30,50,24,80])  # 如果各個值 加起來 比1大 就會計算各個部分的百分比
plt.pie(data)
plt.axis('equal')

普通未占滿餅圖

data = np.array([0.2,0.4,0.2,0.1])  # 如果比1 小 直接把各個部分的值 作為 百分比
plt.pie(data)

餅圖陰影、分裂等屬性設置

  • labels參數設置每一塊的標簽;
  • labeldistance參數設置標簽距離圓心的距離(比例值,只能設置一個浮點小數)
  • autopct參數設置比例值的顯示格式(%.nf%%);
  • pctdistance參數設置比例值文字距離圓心的距離
  • explode參數設置每一塊頂點距圓形的長度(比例值,列表);
  • colors參數設置每一塊的顏色(列表);
  • shadow參數為布爾值,設置是否繪制陰影
  • startangle參數設置餅圖起始角度

 

data = np.array([30,50,24,80])
_ = plt.pie(data
            ,labels=['china','india','brazil','russa']  # 各個部分的名字(標簽)
            ,labeldistance=1.1  # 標簽到中心點的距離
            ,autopct='%.1f%%'  # 控制比例的值的顯示
            ,pctdistance=0.5  # 控制百分比的值的顯示位置
            ,explode=[0.1,0,0,0]  # 每一份扇形 到中心點的距離
            ,colors = ['red','green','blue','yellow']
            ,shadow=True
            ,startangle=90  # 繪制圖形時候 開始的角度
           )

直方圖

【直方圖的參數只有一個x!!!不像條形圖需要傳入x,y】

hist()的參數

  • bins
    • 可以是一個bin數量的整數值,也可以是表示bin的一個序列。默認值為10
  • density (normed)
    • 如果值為True,直方圖的值將進行歸一化處理,形成概率密度,默認值為False
  • color
    • 指定直方圖顏色。可以是單一色值或顏色序列。如果指定了多個數據集合,顏色序列將會設置為相同的順序。如果未指定,將會使用一個默認的線條顏色
  • orientation
    • 通過設置orientation為horizontal創建水平直方圖。默認值為vertical
data = np.random.randint(0,100,size=100)
df = DataFrame(data)
df.plot(kind='hist')

# bins指的是要把整個范圍 分成多少份 默認值是10
# density把值從頻率變成概率
# orientation用來控制條形圖的方向 horizontal表示水平
plt.hist(data,bins=5,density=True,color='r',orientation='horizontal')

條形圖

【條形圖有兩個參數x,y】

  • width 水平方向的長度
  • height 豎直方向的長度

bar()、barh()

data = np.array([1,4,7,2,8,5])
index = [1,2,3,4,5,6]
# x是索引, height是高度(值)
plt.bar(x=index,height=data,width=0.5)

# y是各個樣本的索引
# 各個樣本的值的大小 用width來體現
plt.barh(y=index,height=0.5,width=data)

data = np.array([1,2,3,4,5,6])
index = [1,2,3,4,5,6]
plt.bar(x=index,height=data,width=0.5)

plt.axes(polar=True)
data = np.array([1,2,3,4,5,6])
index = [1,2,3,4,5,7]
plt.bar(x=index,height=data,width=0.5)

index = np.arange(0,2*np.pi,np.pi/4)
data = [1,2,3,4,5,6,7,8]
plt.axes(polar=True)
plt.bar(x=index,height=data,width=0.5)

圖形內的文字、注釋、箭頭

控制文字屬性的方法:

所有的方法會返回一個matplotlib.text.Text對象

圖形內的文字

text()

# 以下所有這些 都是文字對象 都可以設置 color rotation fontsize fontproperties ...
axes = plt.subplot()
plt.title('title')  # 畫布標題 實際上 內部調用的 就是axes坐標系的標題
# plt.suptitle('suptitle',color='r',rotation=90,fontsize=10)
plt.figtext(0.2,0.8,'fig_text')  # 畫布內的文本 x和y參數用來指定位置(0-1之間 不過也可以超出這個范圍) s就是文字的內容
axes.set_title('axes_title')
axes.text(0.5,0.5,'axes_text')  # x, y, s
axes.text(0.8,0.2,'axes_text')

注釋

annotate()

  • xy參數設置箭頭指示的位置
  • xytext參數設置注釋文字的位置
  • arrowprops參數以字典的形式設置箭頭的樣式
    • width參數設置箭頭長方形部分的寬度
    • headlength參數設置箭頭尖端的長度,
    • headwidth參數設置箭頭尖端底部的寬度
    • shrink參數設置箭頭頂點、尾部與指示點、注釋文字的距離(比例值),可以理解為控制箭頭的長度
data = np.random.randint(0,10,size=10)
index = np.arange(0,10,1)
data
index
plt.plot(index,data)
# s 注釋的內容
# xy 注釋的位置 以列表或者元組的形式 設置x和y的座標(注意 不是0-1的那種值)
# plt.annotate('hehe',[5,2]) 
# 如果想添加 箭頭 可以用 arrowprops來設置箭頭的樣式
# plt.annotate(s='hehe',xy=[5,2],xytext=[0,8],arrowprops={'width':2})  # xytext用來設置文本的位置 xy是箭頭指向的位置
# plt.annotate(s='hehe',xy=[5,2],xytext=[0,8],arrowprops={'width':2},color='r',rotation=90)  # annotation注釋 也是文本對象 也可以設置文本屬性
plt.annotate(s='hehe',xy=[5,2],xytext=[0,8],arrowprops={'width':20,'headlength':25,'headwidth':25})  # 設置箭頭的樣式 箭頭身體的寬度width 箭頭頭部的寬度headwidth 長度headlength

plt.plot(index,data)
plt.annotate(s='hehe',xy=[5,2],xytext=[0,8],arrowprops={'arrowstyle':'fancy'})

3D圖

曲面圖

導包

  • from mpl_toolkits.mplot3d.axes3d import Axes3D

使用mershgrid函數切割x,y軸

  • X,Y = np.meshgrid(x, y)

創建3d坐標系

  • axes = plt.subplot(projection='3d')

繪制3d圖形

  • p = axes.plot_surface(X,Y,Z,color='red',cmap='summer') # 返回圖形對象

添加colorbar

  • plt.colorbar(p,shrink=0.5) # 傳入圖形對象
from mpl_toolkits.mplot3d.axes3d import Axes3D
axes = plt.subplot(projection='3d')

# 取遍 x y 平面上的整數點
x = np.linspace(0,5,6)  # 取遍了x軸線上的整數點
x
y = np.linspace(0,5,6)
y
X,Y = np.meshgrid(x,y)
def fn(x,y):
    return np.sin(y)-np.cos(x)
Z = fn(X,Y)
x = np.linspace(-6,6,100)
y = np.linspace(-6,6,100)
X,Y = np.meshgrid(x,y)
# plot_surface繪制平面
plt.figure(figsize=(12,8))
axes = plt.subplot(projection='3d')
# axes.plot_surface(X, Y, Z,color='red')
p = axes.plot_surface(X, Y, Z,cmap='rainbow')
plt.colorbar(p,shrink=0.5)

玫瑰圖/極坐標條形圖

創建極坐標,設置polar屬性

plt.axes(polar = True)

繪制極坐標條形圖

index = np.arange(0,2*np.pi,2*np.pi/8)
plt.bar(x=index ,height = [1,2,3,4,5,6,7,8] ,width = 2*np.pi/8)

 

 


免責聲明!

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



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