Python讀取csv、Excel文件生成圖表的方法
簡介
本文章介紹了通過讀取csv 或 Excel 文件內(nèi)容,將其轉(zhuǎn)換為折線圖或柱狀圖的方法,并寫入 html 文件中。
1. 讀取CSV文件
1.1. 生成折線圖
1.1.1. 簡單生成圖表
代碼如下
import pandas import matplotlib.pyplot as plt # 設(shè)置csv文件路徑 file = r'E:\test.csv' # 防止中文亂碼 plt.rcParams['font.sans-serif'] = ['Microsoft YaHei'] # 通過pandas讀取文件內(nèi)容 df = pandas.read_csv(file) # 將文件第一行設(shè)置為序列名稱 series_names = df .columns # 將文件數(shù)據(jù)繪制為折線圖 plt.plot(df) plt.legend(series_names) #設(shè)置序列名稱 plt.xlabel('橫軸標(biāo)題') #設(shè)置橫坐標(biāo)名稱 plt.ylabel('縱軸標(biāo)題') #設(shè)置縱坐標(biāo)名稱 plt.title('圖表標(biāo)題') #設(shè)置圖表標(biāo)題 # 將繪制的圖表顯示在屏幕上 plt.show() # 保存圖表為png文件 # plt.savefig('filename.png')
繪制結(jié)果如下(csv文件中含有3列數(shù)據(jù))
1.1.2. 設(shè)置折線圖格式
代碼如下(在1.1.1目錄的代碼基礎(chǔ)上增加了:圖片長寬、標(biāo)記樣式、網(wǎng)格線、橫縱軸參考線)
import pandas import matplotlib.pyplot as plt # 設(shè)置csv文件路徑 file = r'E:\test.csv' # 防止中文亂碼 plt.rcParams['font.sans-serif'] = ['Microsoft YaHei'] # 通過pandas讀取文件內(nèi)容 df = pandas.read_csv(file) # 將文件第一行設(shè)置為序列名稱 series_names = df .columns # 定義圖表大小(長15,高8),必須放在plt.plot前面 plt.figure(figsize=(15,8)) # 將文件數(shù)據(jù)繪制為折線圖 plt.plot(df, marker='o', markersize=3) #marker設(shè)置標(biāo)記樣式和大小 plt.xlabel('橫軸標(biāo)題') #設(shè)置橫坐標(biāo)名稱 plt.ylabel('縱軸標(biāo)題') #設(shè)置縱坐標(biāo)名稱 plt.title('圖表標(biāo)題') #設(shè)置圖表標(biāo)題 plt.grid() #顯示網(wǎng)格線 plt.legend(series_names) #設(shè)置序列名稱 plt.axhline(y=2, color='r', linestyle='--') #在y軸上添加橫向參考線。 plt.axvline(x=1, color='r', linestyle='--') #在x軸上添加縱向參考線。 # 將繪制的圖表顯示在屏幕上 plt.show() # 保存圖表為png文件 # plt.savefig('filename.png')
繪制結(jié)果如下
1.2. 生成柱狀圖
1.2.1. 簡單生成圖表
代碼如下
import pandas as pd import matplotlib.pyplot as plt # 從CSV文件讀取數(shù)據(jù)并指定第一行為列名 data = pd.read_csv(r'E:\test.csv', header=0) # 防止中文亂碼 plt.rcParams['font.sans-serif'] = ['Microsoft YaHei'] # 獲取列名和對應(yīng)的值 columns = data.columns values = data.iloc[0].values # 繪制柱狀圖 plt.bar(columns, values) plt.xlabel('橫軸標(biāo)題') plt.ylabel('縱軸標(biāo)題') plt.title('圖表標(biāo)題') # 將繪制的圖表顯示在屏幕上 plt.show() # 保存圖表為png文件 # plt.savefig('filename.png')
繪制結(jié)果如下
1.2.2. 設(shè)置柱狀圖格式
顏色代碼
'b' 表示藍(lán)色'g' 表示綠色'r' 表示紅色'c' 表示青色'm' 表示品紅色'y' 表示黃色'k' 表示黑色'w' 表示白色。
代碼如下(在1.2.1目錄的代碼基礎(chǔ)上增加了:圖片長寬、柱子寬度/顏色、邊框?qū)挾?顏色)
import pandas as pd import matplotlib.pyplot as plt # 從CSV文件讀取數(shù)據(jù)并指定第一行為列名 data = pd.read_csv(r'E:\test.csv', header=0) # 防止中文亂碼 plt.rcParams['font.sans-serif'] = ['Microsoft YaHei'] # 定義圖表大小(長15,高8),必須放在plt.plot前面 plt.figure(figsize=(15,8)) # 獲取列名和對應(yīng)的值 columns = data.columns values = data.iloc[0].values # 繪制柱狀圖 plt.bar(columns, values, #橫軸坐標(biāo) color='y', #設(shè)置柱子顏色(黃色,見顏色代碼) width = 0.8, #設(shè)置柱子寬度 edgecolor='k', #設(shè)置柱子邊框顏色(黑色,見顏色代碼) linewidth=2 #設(shè)置柱子邊框?qū)挾? ) plt.xlabel('橫軸標(biāo)題') plt.ylabel('縱軸標(biāo)題') plt.title('圖表標(biāo)題') # 將繪制的圖表顯示在屏幕上 plt.show() # 保存圖表為png文件 # plt.savefig('filename.png')
繪制結(jié)果如下
2. 讀取Excel文件
2.1. 生成折線圖
2.1.1. 簡單生成圖表
代碼如下
import pandas import matplotlib.pyplot as plt # 防止亂碼 plt.rcParams['font.sans-serif'] = ['Microsoft YaHei'] # 讀取Excel文件內(nèi)容 df = pandas.read_excel(r'E:\test.xlsx', sheet_name='Sheet1') column_names = df.columns.tolist() #獲取第1行名稱 excel_rows = df.shape[0] #獲取行數(shù) # 設(shè)置橫軸數(shù)據(jù),可以在Excel中獲取,這里直接將行數(shù)從1開始遍歷到末尾 x = [i for i in range(1, excel_rows+1)] # 遍歷第一行的列名 for col_name in column_names: # 通過列名提取畫圖的數(shù)據(jù) y = df[col_name].to_numpy() # 畫圖,執(zhí)行橫軸坐標(biāo),將線條圖例名設(shè)置為第一行的列名 plt.plot(x, y, label=col_name) # 設(shè)置屬性 plt.legend() # 顯示圖例標(biāo)題 plt.xlabel('橫坐標(biāo)名稱') plt.ylabel('縱坐標(biāo)名稱') plt.title('折線圖標(biāo)題') # plt.savefig('./filename.jpg') # 保存圖片 plt.show() # 查看圖片
繪制結(jié)果如下
2.1.2. 設(shè)置折線圖格式
代碼如下(在2.1.1目錄的代碼基礎(chǔ)上增加了:圖片長寬、標(biāo)記樣式、網(wǎng)格線、橫縱軸參考線)
import pandas import matplotlib.pyplot as plt # 防止亂碼 plt.rcParams['font.sans-serif'] = ['Microsoft YaHei'] # 讀取Excel文件內(nèi)容,如果讀取csv文件,則使用pandas.read_csv df = pandas.read_excel(r'E:\test.xlsx', sheet_name='Sheet1') column_names = df.columns.tolist() #讀取第1行名稱 excel_rows = df.shape[0] #讀取行數(shù) # 定義圖表大小(長15,高8),必須放在plt.plot前面 plt.figure(figsize=(15,8)) # 設(shè)置橫軸數(shù)據(jù),可以在Excel中獲取,這里直接將行數(shù)從1開始遍歷到末尾 x = [i for i in range(1, excel_rows+1)] # 遍歷第一行的列名 for col_name in column_names: # 通過列名提取畫圖的數(shù)據(jù) y = df[col_name].to_numpy() # 畫圖,執(zhí)行橫軸坐標(biāo),將線條圖例名設(shè)置為第一行的列名 plt.plot(x, y, label=col_name, marker='o', markersize=3) #marker設(shè)置標(biāo)記樣式和大小 # 設(shè)置屬性 plt.legend() # 顯示圖例標(biāo)題 plt.xlabel('橫坐標(biāo)名稱') plt.ylabel('縱坐標(biāo)名稱') plt.title('折線圖標(biāo)題') plt.grid() #顯示網(wǎng)格線 plt.axhline(y=2, color='r', linestyle='--') #在y軸上添加橫向參考線 plt.axvline(x=1, color='r', linestyle='--') #在x軸上添加縱向參考線 # plt.savefig('./aa.jpg') # 保存圖片 plt.show() # 查看圖片
繪制結(jié)果如下
2.2. 生成柱狀圖
2.2.1. 簡單生成圖表
代碼如下(單行數(shù)據(jù))
import pandas import matplotlib.pyplot as plt # 防止亂碼 plt.rcParams['font.sans-serif'] = ['Microsoft YaHei'] # 讀取Excel文件內(nèi)容 df = pandas.read_excel(r'E:\test.xlsx', sheet_name='Sheet1') # 獲取第一行的名稱 column_names = df.columns.tolist() # 去除第一行,并轉(zhuǎn)置數(shù)據(jù) data = df.T # 創(chuàng)建柱狀圖,指定繪制的類型為柱狀圖(line:折線圖(默認(rèn)),bar:柱狀圖,barh:水平柱狀圖,hist:直方圖,box:箱線圖,kde:核密度估計圖,density:密度圖,area:面積圖,scatter:散點(diǎn)圖,hexbin:Hexbin 圖(用于顯示二維數(shù)據(jù)的分布情況)) data.plot(kind='bar') # 設(shè)置柱子的名稱(rotation旋轉(zhuǎn)柱子標(biāo)題的度數(shù)) plt.xticks(range(len(column_names)), column_names, rotation=0) # 添加標(biāo)題和坐標(biāo)軸標(biāo)簽 plt.title('圖表標(biāo)題') plt.xlabel('橫軸標(biāo)題') plt.ylabel('縱軸標(biāo)題') # 顯示柱狀圖 plt.show()
繪制結(jié)果如下
多行數(shù)據(jù)需要增加修改圖例名稱的方法,默認(rèn)從0開始,設(shè)置為從1開始。每個圖例表示行數(shù),比例1:第一行;2:第二行...
import pandas import matplotlib.pyplot as plt # 防止亂碼 plt.rcParams['font.sans-serif'] = ['Microsoft YaHei'] # 讀取Excel文件內(nèi)容 df = pandas.read_excel(r'E:\test.xlsx', sheet_name='Sheet2') # 獲取第一行的名稱 column_names = df.columns.tolist() # 去除第一行,并轉(zhuǎn)置數(shù)據(jù) data = df.T # 創(chuàng)建柱狀圖,指定繪制的類型為柱狀圖(line:折線圖(默認(rèn)),bar:柱狀圖,barh:水平柱狀圖,hist:直方圖,box:箱線圖,kde:核密度估計圖,density:密度圖,area:面積圖,scatter:散點(diǎn)圖,hexbin:Hexbin 圖(用于顯示二維數(shù)據(jù)的分布情況)) data.plot(kind='bar') # 設(shè)置柱子的名稱(rotation旋轉(zhuǎn)柱子標(biāo)題的度數(shù)) plt.xticks(range(len(column_names)), column_names, rotation=0) # 添加標(biāo)題和坐標(biāo)軸標(biāo)簽 plt.title('圖表標(biāo)題') plt.xlabel('橫軸標(biāo)題') plt.ylabel('縱軸標(biāo)題') # 修改圖例名稱(從1開始,1表示第1行數(shù)據(jù)...) handles, labels = plt.gca().get_legend_handles_labels() labels = [int(label)+1 for label in labels] plt.legend(handles, labels) # 顯示柱狀圖 plt.show()
2.2.2. 設(shè)置柱狀圖格式
顏色代碼
'b' 表示藍(lán)色'g' 表示綠色'r' 表示紅色'c' 表示青色'm' 表示品紅色'y' 表示黃色'k' 表示黑色'w' 表示白色。
代碼如下(在2.2.1目錄的代碼基礎(chǔ)上增加了:圖片長寬、柱子寬度/顏色、邊框?qū)挾?顏色)
import pandas import matplotlib.pyplot as plt # 防止亂碼 plt.rcParams['font.sans-serif'] = ['Microsoft YaHei'] # 讀取Excel文件內(nèi)容 df = pandas.read_excel(r'E:\test.xlsx', sheet_name='Sheet1') # 設(shè)置圖片大小(長15,寬8) fig = plt.figure(figsize=(15, 8)) ax = fig.add_subplot() # 獲取第一行的名稱 column_names = df.columns.tolist() # 去除第一行,并轉(zhuǎn)置數(shù)據(jù) data = df.T # 創(chuàng)建柱狀圖 data.plot( kind='bar', #指定繪制的類型為柱狀圖(line:折線圖(默認(rèn)),bar:柱狀圖,barh:水平柱狀圖,hist:直方圖,box:箱線圖,kde:核密度估計圖,density:密度圖,area:面積圖,scatter:散點(diǎn)圖,hexbin:Hexbin 圖(用于顯示二維數(shù)據(jù)的分布情況)) color='y', #設(shè)置柱子顏色(黃色,見顏色代碼) width=0.8, # 設(shè)置柱子寬度 edgecolor='k', #設(shè)置柱子邊框顏色(黑色,見顏色代碼) linewidth=2, #設(shè)置柱子邊框?qū)挾? ax=ax #設(shè)置圖片大小 ) # 設(shè)置柱子的名稱(rotation旋轉(zhuǎn)柱子標(biāo)題的度數(shù)) plt.xticks(range(len(column_names)), column_names, rotation=0) # 添加標(biāo)題和坐標(biāo)軸標(biāo)簽 plt.title('圖表標(biāo)題') plt.xlabel('橫軸標(biāo)題') plt.ylabel('縱軸標(biāo)題') # 顯示柱狀圖 plt.show()
繪制結(jié)果如下
3. 將生成的折線圖寫入html文件
3.1. 直接寫入圖片
使用MarkupPy 將圖片寫入html文件
from MarkupPy import markup # 添加圖片,設(shè)置長、寬 page = markup.page() page.add('<img src="./filename.png" alt="csv生成的折線圖" width="800" height="500">') # 寫入文件 with open('./tmp.html', 'w') as file: file.write(str(page))
代碼如下(以csv生成的折線圖為例)
import pandas import matplotlib.pyplot as plt from MarkupPy import markup # 設(shè)置csv文件路徑 file = r'E:\test.csv' # 防止中文亂碼 plt.rcParams['font.sans-serif'] = ['Microsoft YaHei'] # 通過pandas讀取文件內(nèi)容 df = pandas.read_csv(file) # 將文件第一行設(shè)置為序列名稱 series_names = df .columns # 將文件數(shù)據(jù)繪制為折線圖 plt.plot(df) plt.legend(series_names) #設(shè)置序列名稱 plt.xlabel('橫軸標(biāo)題') #設(shè)置橫坐標(biāo)名稱 plt.ylabel('縱軸標(biāo)題') #設(shè)置縱坐標(biāo)名稱 plt.title('圖表標(biāo)題') #設(shè)置圖表標(biāo)題 # 保存圖表為png文件 plt.savefig('./filename.png') # 添加圖片 page = markup.page() page.add('<img src="./filename.png" alt="csv生成的折線圖" width="800" height="500">') # 寫入文件 with open('./tmp.html', 'w') as file: file.write(str(page))
結(jié)果如下
3.2. 添加文字描述
文件描述見MarkupPy 的詳細(xì)使用方法
http://www.dbjr.com.cn/python/2938017jt.htm
到此這篇關(guān)于Python讀取csv、Excel文件生成圖表的文章就介紹到這了,更多相關(guān)Python讀取csv生成圖表內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python中dot函數(shù)運(yùn)算過程總結(jié)
dot函數(shù)為numpy庫下的一個函數(shù),主要用于矩陣的乘法運(yùn)算,其中包括:向量內(nèi)積、多維矩陣乘法和矩陣與向量的乘法,下面這篇文章主要給大家介紹了關(guān)于python中dot函數(shù)運(yùn)算過程的相關(guān)資料,需要的朋友可以參考下2022-09-09python base64 decode incorrect padding錯誤解決方法
這篇文章主要介紹了python base64 decode incorrect padding錯誤解決方法,本文使用把string補(bǔ)齊等號的方法解決了這個錯誤,需要的朋友可以參考下2015-01-01Python通過cron或schedule實現(xiàn)爬蟲的自動定時運(yùn)行
自動定時運(yùn)行爬蟲是很多數(shù)據(jù)采集項目的基本需求,通過 Python 實現(xiàn)定時任務(wù),可以保證數(shù)據(jù)采集的高效和持續(xù)性,本文將帶大家了解如何在 Python 中使用 cron 和 schedule 來實現(xiàn)爬蟲的自動定時運(yùn)行,需要的朋友可以參考下2024-12-12Python基于BeautifulSoup和requests實現(xiàn)的爬蟲功能示例
這篇文章主要介紹了Python基于BeautifulSoup和requests實現(xiàn)的爬蟲功能,結(jié)合實例形式分析了Python使用BeautifulSoup和requests庫爬取網(wǎng)站指定信息的相關(guān)操作技巧,需要的朋友可以參考下2019-08-08Python:type、object、class與內(nèi)置類型實例
今天小編就為大家分享一篇Python:type、object、class與內(nèi)置類型實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12