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:散點圖,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:散點圖,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:散點圖,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://m.fzitv.net/python/2938017jt.htm
到此這篇關(guān)于Python讀取csv、Excel文件生成圖表的文章就介紹到這了,更多相關(guān)Python讀取csv生成圖表內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python已正確安裝Numpy但無法調(diào)用背后的奧秘及解決辦法
這篇文章主要給大家介紹了關(guān)于Python已正確安裝Numpy但無法調(diào)用背后的奧秘及解決辦法,文中提供了多種可能的原因和解決方案,同時還給出了預(yù)防措施,幫助開發(fā)者避免未來出現(xiàn)類似問題,需要的朋友可以參考下2024-12-12
python實現(xiàn)創(chuàng)建新列表和新字典,并使元素及鍵值對全部變成小寫
今天小編就為大家分享一篇python實現(xiàn)創(chuàng)建新列表和新字典,并使元素及鍵值對全部變成小寫,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-01-01
基于Python實現(xiàn)給喜歡的主播自動發(fā)彈幕
這篇文章主要介紹了python如何實現(xiàn)給喜歡的主播自動發(fā)彈幕的功能,文中的示例代碼對我們學(xué)習(xí)Python有一定的幫助,感興趣的朋友可以了解下2021-12-12
Python使用markconv實現(xiàn)將Markdown轉(zhuǎn)換為PDF
PDF是一種跨平臺的文檔格式,將?Markdown?轉(zhuǎn)換為?PDF?是?markconv?的另一個核心功能,下面我們就來看看Python如何使用markconv實現(xiàn)將Markdown轉(zhuǎn)換為PDF吧2026-03-03

