簡介
本文章介紹了通過讀取?csv 或 Excel 文件內(nèi)容,將其轉(zhuǎn)換為折線圖或柱狀圖的方法,并寫入 html 文件中。
目錄
1. 讀取CSV文件
1.1. 生成折線圖
1.1.1. 簡單生成圖表
1.1.2. 設(shè)置折線圖格式
1.2. 生成柱狀圖
1.2.1. 簡單生成圖表
1.2.2. 設(shè)置柱狀圖格式
2. 讀取Excel文件
2.1. 生成折線圖
2.1.1. 簡單生成圖表
2.1.2. 設(shè)置折線圖格式
2.2. 生成柱狀圖
2.2.1. 簡單生成圖表
2.2.2. 設(shè)置柱狀圖格式
3. 將生成的折線圖寫入html文件
3.1. 直接寫入圖片
3.2. 添加文字描述
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ù))
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?文章來源地址http://www.zghlxwxcb.cn/news/detail-618531.html
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' 表示藍色
'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' 表示藍色
'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 的詳細使用方法
超鏈接:Python模塊MarkupPy & 自定義html報告文章來源:http://www.zghlxwxcb.cn/news/detail-618531.html
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
到了這里,關(guān)于Python讀取csv、Excel文件生成圖表的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!