Matplotlib數據可視化(7):圖片展示與保存


In [1]:
import os
import matplotlib.image as mpimg
from PIL import Image
import matplotlib.pyplot as plt
import numpy as np
import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']  # 中文字體支持
 

除了作圖功能,matplotlib也提供本地圖片展示以及保存圖片的功能,這兩個通能通過imshow()方法和savefig()方法實現。

 

1 圖片展示

 

在使用imshow()展示圖片前,需要先將圖片讀取出來。讀取圖片可以通過pillow庫,也可以用matplotlib本身自帶的image模塊實現。

In [2]:
# 使用pillow庫讀取圖片
img = Image.open(r"./jupyter/matplotlib/images/1.jpg")
fig = plt.figure(figsize=(8, 4))
ax1 = fig.add_subplot(121)
ax1.imshow(img)

# 使用matplotlib自帶image庫讀取圖片
img = mpimg.imread(r"./jupyter/matplotlib/images/1.jpg")  
ax2 = fig.add_subplot(122)
ax2.imshow(img)


plt.show()
 
 

可以設置關閉坐標軸:

In [3]:
img = mpimg.imread(r"./jupyter/matplotlib/images/1.jpg")  
fig = plt.figure(figsize=(4, 2))
ax1 = fig.add_subplot(111)
ax1.imshow(img)
ax1.axis('off')

plt.show()
 
 

imshow()方法中提供了眾多參數以供個性化得展示圖片,但我更建議使用pillow等專業的圖片處理庫先對圖片進行處理,然后交由imshow()方法進行展示,以下是使用imshow方法顯示灰度圖片:

In [4]:
img=Image.open(r"./jupyter/matplotlib/images/1.jpg")
img = np.array(img)
if img.ndim == 3:
    img2 = img[:,:,0]
plt.subplot(321); plt.imshow(img)
plt.subplot(322); plt.imshow(img, cmap = 'gray')  # 無效
plt.subplot(323); plt.imshow(img2)
plt.subplot(324); plt.imshow(img2, cmap = 'gray')  # 灰度
plt.subplot(325); plt.imshow(img2, cmap = plt.cm.gray)  # 與cmap ='gray'等效
plt.subplot(326); plt.imshow(img2, cmap = plt.cm.gray_r)  # 反向灰度
plt.show()
 
 

顯示多張圖片:

In [5]:
index = 1

fig, axes = plt.subplots(4, 3, figsize=(8, 4), tight_layout=True)
for row in range(4):
    for col in range(3):
        image_name = os.path.join(r'./jupyter/matplotlib/images', str(index)+'.jpg')
        img = plt.imread(image_name)
        axes[row, col].imshow(img)
        axes[row, col].axis('off')
        index += 1
plt.show()
 
 

2 保存圖片

當我們使用matplotlib完成作圖后,難免有需要將圖表保存到本地的需求,這時候就可以使用savefig()方法實現。savefig()方法主要參數如下:

  • fname:保存后圖片名
  • dpi:像素
  • quality:用大於1小於100的標量表示圖片質量
  • facecolor:前景色
  • edgecolor:邊框顏色
  • format:文件格式
  • transparent:是否透明,當沒有設置前景色和邊框顏色時,如果transparent值為True保存為png格式時為透明
In [6]:
index = 1

fig, axes = plt.subplots(4, 3, figsize=(8, 4), tight_layout=True)
for row in range(4):
    for col in range(3):
        image_name = os.path.join(r'./jupyter/matplotlib/images', str(index)+'.jpg')
        img = plt.imread(image_name)
        axes[row, col].imshow(img)
        axes[row, col].axis('off')
        index += 1
fig.savefig('save_img.jpg', facecolor='grey', edgecolor='red')
plt.show()
 
 

這時候,在本地打開圖片如下所示:

 

In [7]:
value= np.arange(6) ** 2
category = range(len(value))

fig = plt.figure(figsize=(8, 4))

# 垂直柱狀圖
ax1 = fig.add_subplot(121)
ax1.set_title('圖1 垂直柱狀圖')
ax1.bar(x=category, height=value)

# 垂直柱狀圖
ax2 = fig.add_subplot(122)
ax2.set_title('圖2 水平柱狀圖')
ax2.barh(y=category, width=value)

fig.savefig(r"bar_img.png", transparent=True) # 
plt.show()
 
 

保存后的本地圖片bar_img.png如下所示:

 


免責聲明!

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



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