Matplotlib-畫圖種類


Scatter 散點圖

本節我們將講述各種不同的plot的方式。之前我們講到了如何plot線,今天我們講述如何plot散點圖。

# 首先,先引入matplotlib.pyplot簡寫作plt,再引入模塊numpy用來產生一些隨機數據。
# 生成1024個呈標准正態分布的二維數據組 (平均數是0,方差為1) 作為一個數據集,並圖像化這個數據集。
# 每一個點的顏色值用T來表示:

import matplotlib.pyplot as plt
import numpy as np

n = 1024    # data size
X = np.random.normal(0, 1, n) # 每一個點的X值
Y = np.random.normal(0, 1, n) # 每一個點的Y值
T = np.arctan2(Y,X) # for color value

# 數據集生成完畢,現在來用scatterplot這個點集,鼠標點上去,可以看到這個函數的各個parameter的描述,如下圖:

# 輸入X和Y作為location,size=75,顏色為T,color map用默認值,透明度alpha 為 50%。 
# x軸顯示范圍定位(-1.5,1.5),並用xtick()函數來隱藏x坐標軸,y軸同理:
plt.scatter(X, Y, s=75, c=T, alpha=.5)

plt.xlim(-1.5, 1.5)
plt.xticks(())  # ignore xticks
plt.ylim(-1.5, 1.5)
plt.yticks(())  # ignore yticks

plt.show()

 Bar 柱狀圖

本節我們介紹一下用matplotib來制作一個柱狀圖,

生成基本圖形

向上向下分別生成12個數據,X為 0 到 11 的整數 ,Y是相應的均勻分布的隨機數據。使用的函數是plt.bar,參數為X和Y:
# Bar 柱狀圖

# 生成基本圖形
# 向上向下分別生成12個數據,X為 0 到 11 的整數 ,Y是相應的均勻分布的隨機數據。 
# 使用的函數是plt.bar,參數為X和Y:

import matplotlib.pyplot as plt
import numpy as np

n = 12
X = np.arange(n)
Y1 = (1 - X / float(n)) * np.random.uniform(0.5, 1.0, n)
Y2 = (1 - X / float(n)) * np.random.uniform(0.5, 1.0, n)

plt.bar(X, +Y1, facecolor='#9999ff', edgecolor='white')
plt.bar(X, -Y2, facecolor='#ff9999', edgecolor='white')

plt.xlim(-.5, n)
plt.xticks(())
plt.ylim(-1.25, 1.25)
plt.yticks(())

plt.show()
# 這樣我們就生成了下圖所示的柱狀圖基本框架:
# 加顏色和數據
# 下面我們就顏色和數值進行優化。 用facecolor設置主體顏色,edgecolor設置邊框顏色為白色,

# 接下來我們用函數plt.text分別在柱體上方(下方)加上數值,
# 用%.2f保留兩位小數,橫向居中對齊ha='center',縱向底部(頂部)對齊va='bottom':
import matplotlib.pyplot as plt
import numpy as np

n = 12
X = np.arange(n)
Y1 = (1 - X / float(n)) * np.random.uniform(0.5, 1.0, n)
Y2 = (1 - X / float(n)) * np.random.uniform(0.5, 1.0, n)

plt.bar(X, +Y1, facecolor='#9999ff', edgecolor='white')
plt.bar(X, -Y2, facecolor='#ff9999', edgecolor='white')

plt.xlim(-.5, n)
plt.xticks(())
plt.ylim(-1.25, 1.25)
plt.yticks(())


for x, y in zip(X, Y1):
    # ha: horizontal alignment 水平對齊
    # va: vertical alignment  垂直對齊
    plt.text(x + 0.4, y + 0.05, '%.2f' % y, ha='center', va='bottom')

for x, y in zip(X, Y2):
    # ha: horizontal alignment
    # va: vertical alignment
    plt.text(x + 0.4, -y - 0.05, '%.2f' % y, ha='center', va='top')
plt.show() 

 

Contours 等高線圖

contour美: ['kɑn.tʊr] 英: ['kɒntʊə(r)]n.輪廓;等高線

畫等高線
添加高度數字
Contours 等高線圖

#數據集即三維點 (x,y) 和對應的高度值,共有256個點。高度值使用一個 height function f(x,y) 生成。 x, y 分別是在區間 [-3,3] 中均勻分布的256個值,並用meshgrid在二維平面中將每一個x和每一個y分別對應起來,編織成柵格:

import matplotlib.pyplot as plt
import numpy as np

def f(x,y):
    # the height function
    return (1 - x / 2 + x**5 + y**3) * np.exp(-x**2 -y**2)

n = 256
x = np.linspace(-3, 3, n)
y = np.linspace(-3, 3, n)
X,Y = np.meshgrid(x, y)
# 接下來進行顏色填充。使用函數plt.contourf把顏色加進去,位置參數分別為:X, Y, f(X,Y)。透明度0.75,並將 f(X,Y) 的值對應到color map的暖色組中尋找對應顏色。

# use plt.contourf to filling contours
# X, Y and value for (X,Y) point
plt.contourf(X, Y, f(X, Y), 8, alpha=.75, cmap=plt.cm.hot)

# 接下來進行等高線繪制。使用plt.contour函數划線。位置參數為:X, Y, f(X,Y)。顏色選黑色,線條寬度選0.5。現在的結果如下圖所示,只有顏色和線條,還沒有數值Label:
# use plt.contour to add contour lines
C = plt.contour(X, Y, f(X, Y), 8, colors='black', linewidth=.5)
# 添加高度數字

# 其中,8代表等高線的密集程度,這里被分為10個部分。如果是0,則圖像被一分為二。 #最后加入Label,inline控制是否將Label畫在線里面,字體大小為10。並將坐標軸隱藏:
plt.clabel(C, inline=True, fontsize=10) plt.xticks(()) plt.yticks(())

 

Image 圖片

隨機矩陣畫圖
出圖方式
colorbar
# 隨機矩陣畫圖
#這一節我們講解怎樣在matplotlib中打印出圖像。這里我們打印出的是純粹的數字,而非自然圖像。 我們今天用這樣 3x3 的 2D-array 來表示點的顏色,每一個點就是一個pixel。
import matplotlib.pyplot as plt
import numpy as np

a = np.array([0.313660827978, 0.365348418405, 0.423733120134,
              0.365348418405, 0.439599930621, 0.525083754405,
              0.423733120134, 0.525083754405, 0.651536351379]).reshape(3,3)
# 三行三列的格子,a代表每一個值,圖像右邊有一個注釋,白色代表值最大的地方,顏色越深值越小。下面我們來看代碼:
plt.imshow(a, interpolation='nearest', cmap='bone', origin='lower')

# 我們之前選cmap的參數時用的是:cmap=plt.cmap.bone,而現在,我們可以直接用單引號傳入參數。 origin='lower'代表的就是選擇的原點的位置。

# 出圖方式
# 我們在這個鏈接 可以看到matplotlib官網上對於內插法的不同方法的描述。下圖是一個示例:

# 這里我們使用的是內插法中的 Nearest-neighbor 的方法,其他的方式也都可以隨意取選。

plt.imshow(a, interpolation='nearest', cmap='bone', origin='lower'
 
          
         
# colorbar

# 下面我們添加一個colorbar ,其中我們添加一個shrink參數,使colorbar的長度變短為原來的92%:

plt.colorbar(shrink=.92)

plt.xticks(())
plt.yticks(())
plt.show()

 

3D 數據

3D 圖
投影
# 3D 數據

# 首先在進行 3D Plot 時除了導入 matplotlib ,還要額外添加一個模塊,即 Axes 3D 3D 坐標軸顯示:

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# 之后要先定義一個圖像窗口,在窗口上添加3D坐標軸,顯示成下圖:
fig = plt.figure()
ax = Axes3D(fig)
# 接下來給進 X 和 Y 值,並將 X 和 Y 編織成柵格。每一個(X, Y)點對應的高度值我們用下面這個函數來計算。

# X, Y value
X = np.arange(-4, 4, 0.25)
Y = np.arange(-4, 4, 0.25)
X, Y = np.meshgrid(X, Y)    # x-y 平面的網格
R = np.sqrt(X ** 2 + Y ** 2)
# height value
Z = np.sin(R)
# 做出一個三維曲面,並將一個 colormap rainbow 填充顏色,之后將三維圖像投影到 XY 平面上做一個等高線圖。 plot 3D 圖像:
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=plt.get_cmap('rainbow'))

# 其中,rstride 和 cstride 分別代表 row 和 column 的跨度。 # 投影 # 下面添加 XY 平面的等高線:' ax.contourf(X, Y, Z, zdir='z', offset=-2, cmap=plt.get_cmap('rainbow'))

# zdir='z'可以選擇x,y,z

 


免責聲明!

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



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