最近一直在做實驗但在解決問題時總是兜兜轉轉又回到原點,因此只能記錄一些零碎的知識,在此用學術的語言記錄最為簡單的知識。
下面以循序漸進的方式記錄將圖片保存到文件夾的過程,由需求促進代碼進一步完善。在此以本人解決這個問題所思考的步驟記錄下來,主要是經歷了以下幾個過程:
總得來說,最後是實現批量繪制並存儲多張以時間命名的圖片在同一個文件夾中(當然也可以放在不同的文件夾)
#基本存儲
import matplotlib.pyplot as plt
x=[0,1,2,3,4,5]
y=[0,2,4,6,8,10]
plt.plot(x,y)#繪制圖片
plt.savefig( 'exam.png')#存儲圖片時給圖片命名,注意要放在plt.show()前
plt.show()
【輸出結果】(會在代碼所在目錄直接存儲圖片)
【缺點】當輸出的圖片非常多時,逐一命名與存儲既麻煩又會造成目錄非常不好看
因此,下面可以基本想到要創建一個文件夾來存放圖片
#存儲圖片同一個文件夾中
import matplotlib.pyplot as plt
import os#注意要輸入OS模塊
x=[0,1,2,3,4,5]
y=[0,2,4,6,8,10]
plt.plot(x,y)
# 指定圖片保存路徑
figure_save_path = "file_fig"
if not os.path.exists(figure_save_path):
os.makedirs(figure_save_path) # 如果不存在目錄figure_save_path,則創建
plt.savefig(os.path.join(figure_save_path , 'exam.png'))#第一個是指存儲路徑,第二個是圖片名字
plt.show()
【輸出結果】(會在代碼所在目錄創建一個名字為“file_fig”的文件夾,並存儲名字為’exam.png’的圖片)
【缺點】
這裡的圖片與文件夾均只是針對一張圖片,一個文件夾,如果我的圖片非常多,而且是通過循環來繪制的,那麼此時可以考慮同樣利用循環給每張圖片逐一命名存儲在同一個文件夾或是逐一存儲在不同文件夾(主要是利用遍歷列表,先將名字放在列表中,然後結合循環逐一賦予/使用)
#批量繪制圖片+批量存儲
import matplotlib.pyplot as plt
import os
for i in range(0,3,1):
x=[i,1,2,3,4,5]
y=[0,2,4,6,8,10]
name_list=["one","two","three"]#先創建名字列表,可以是用在圖片命名,也可以用在文件夾命名
plt.plot(x,y)
# 指定圖片保存路徑
figure_save_path = "files_fig_many"#這裡創建了一個文件夾,如果依次創建不同文件夾,可以用name_list[i]
if not os.path.exists(figure_save_path):
os.makedirs(figure_save_path) # 如果不存在目錄figure_save_path,則創建
plt.savefig(os.path.join(figure_save_path , name_list[i]))#分別命名圖片
plt.show()
【輸出結果】(實現在代碼所在文件夾創建一個名為”files_fig_many“的文件夾,裡面存儲了三張不同名字的圖片)
這裡圖片的名字是事先建立了列表存起來的,如果對名字沒有特別要求,可以考慮直接用數字列表會更方便
【可改進】
這裡圖片的命名可以考慮改進一下,一般時候我們會希望用時間記錄輸出結果,因此可以考慮給圖片/文件夾名字加上實時的時間
這裡與實際運行時間關聯主要是用到datatime模塊,因此需要對前面的代碼加上這個模塊
#將圖片存儲在指定文件夾(附帶創建文件夾)+用循環創建文件名
import matplotlib.pyplot as plt
import os
import datetime#注意要輸入這個模塊
for i in range(0,3,1):
x=[i,1,2,3,4,5]
y=[0,2,4,6,8,10]
name_list=["one","two","three"]#先把圖片名字存儲成列表
files_name=["file_1_","file_2_","file_3_"]#先把文件夾名字存儲成列表
plt.plot(x,y)
mkfile_time = datetime.datetime.strftime(datetime.datetime.now(), '%Y%m%d%H%M%S')#這裡是引用時間
mkfile_time = files_name[i]+mkfile_time#注意這裡在下面是用作文件夾名字的,裡面也用了列表使每個文件夾的名字不一樣
# 指定圖片保存路徑
figure_save_path = mkfile_time#給文件夾賦予名字
if not os.path.exists(figure_save_path):
os.makedirs(figure_save_path) # 如果不存在目錄figure_save_path,則創建
plt.savefig(os.path.join(figure_save_path , name_list[i]))#分別創建文件夾,分別儲存命名圖片
plt.show()
【輸出結果】(實現了創建三個名字各不相同且有實時時間的文件夾,且裡面分別存儲了一張圖片)
這裡只舉了給文件夾名字加了時間的例子,如果想給圖片名字加時間,方法也是一樣的
#將圖片存儲在指定文件夾(附帶創建文件夾)+用循環創建文件名+如何將多幅圖片儲存在同一個文件夾
import matplotlib.pyplot as plt
import os
import datetime
for i in range(0,3,1):
x=[i,1,2,3,4,5]
y=[0,2,4,6,8,10]
name_list=["one","two","three"]
plt.plot(x,y)
mkfile_time = datetime.datetime.strftime(datetime.datetime.now(), '%Y%m%d%H%M%S')
# 指定圖片保存路徑
figure_save_path = "exam"
if not os.path.exists(figure_save_path):
os.makedirs(figure_save_path) # 如果不存在目錄figure_save_path,則創建
plt.savefig(os.path.join(figure_save_path , name_list[i]+mkfile_time))#創建文件夾,儲存有時間命名的多張圖片
plt.show()
【輸出結果】(輸出一個文件夾中存儲著帶有實時時間命名的多張圖片)
記錄結束