Python讀取Excel繪制直方圖的方法
以下將詳細(xì)介紹如何使用 Python 的 pyecharts、matplotlib 和 seaborn 三個(gè)庫(kù)從 Excel 中讀取數(shù)據(jù)并繪制直方圖(Histogram)。直方圖用于展示數(shù)據(jù)分布,核心是統(tǒng)計(jì)不同區(qū)間的頻數(shù)或頻率。每個(gè)庫(kù)的代碼示例均包含核心類、函數(shù)和屬性的詳細(xì)說(shuō)明。
1. 使用 pyecharts 繪制直方圖
pyecharts 是基于 ECharts 的交互式可視化庫(kù),但需手動(dòng)計(jì)算直方圖的頻數(shù)分布(因無(wú)內(nèi)置直方圖函數(shù))。
代碼示例:
import pandas as pd
import numpy as np
from pyecharts.charts import Bar
from pyecharts import options as opts
# 讀取Excel數(shù)據(jù)
df = pd.read_excel("data.xlsx")
data = df["數(shù)值列"].tolist() # 假設(shè)數(shù)據(jù)列名為"數(shù)值列"
# 計(jì)算直方圖的區(qū)間和頻數(shù)
counts, bins = np.histogram(data, bins=10) # 分10個(gè)區(qū)間
x_labels = [f"{bins[i]:.1f}-{bins[i+1]:.1f}" for i in range(len(bins)-1)]
# 創(chuàng)建柱狀圖(模擬直方圖)
bar = Bar()
bar.add_xaxis(x_labels)
bar.add_yaxis("頻數(shù)", counts.tolist())
# 配置全局選項(xiàng)
bar.set_global_opts(
title_opts=opts.TitleOpts(title="數(shù)值分布直方圖"),
xaxis_opts=opts.AxisOpts(name="區(qū)間"),
yaxis_opts=opts.AxisOpts(name="頻數(shù)"),
toolbox_opts=opts.ToolboxOpts()
)
# 渲染為HTML文件
bar.render("pyecharts_histogram.html")核心類與函數(shù):
Bar(): 柱狀圖對(duì)象,用于模擬直方圖。np.histogram(): 計(jì)算直方圖頻數(shù)和區(qū)間(bins指定區(qū)間數(shù)量)。add_xaxis()/add_yaxis(): 添加 X/Y 軸數(shù)據(jù)。set_global_opts(): 配置標(biāo)題、坐標(biāo)軸名稱等。
2. 使用 matplotlib 繪制直方圖
matplotlib 是基礎(chǔ)繪圖庫(kù),內(nèi)置 hist() 函數(shù)直接繪制直方圖。
代碼示例:
import pandas as pd
import matplotlib.pyplot as plt
# 讀取Excel數(shù)據(jù)
df = pd.read_excel("data.xlsx")
data = df["數(shù)值列"]
# 創(chuàng)建畫(huà)布和坐標(biāo)系
fig, ax = plt.subplots(figsize=(10, 6))
# 繪制直方圖
ax.hist(
data,
bins=10, # 區(qū)間數(shù)量
color="skyblue", # 顏色
edgecolor="black", # 邊框顏色
alpha=0.7, # 透明度
density=False # False顯示頻數(shù),True顯示頻率
)
# 添加標(biāo)題和標(biāo)簽
ax.set_title("數(shù)值分布直方圖", fontsize=14)
ax.set_xlabel("數(shù)值范圍", fontsize=12)
ax.set_ylabel("頻數(shù)", fontsize=12)
ax.grid(axis="y", linestyle="--") # 顯示橫向網(wǎng)格線
# 顯示圖表
plt.tight_layout()
plt.savefig("matplotlib_histogram.png")
plt.show()核心函數(shù)與參數(shù):
ax.hist(): 直方圖繪制函數(shù)。bins: 區(qū)間數(shù)量或具體邊界值(如bins=[0, 10, 20])。color/edgecolor: 填充色和邊框顏色。alpha: 透明度(0-1)。density: 是否顯示頻率(歸一化)。
ax.set_title()/ax.set_xlabel()/ax.set_ylabel(): 標(biāo)題和坐標(biāo)軸標(biāo)簽。
3. 使用 seaborn 繪制直方圖
seaborn 基于 matplotlib,提供更簡(jiǎn)潔的語(yǔ)法和統(tǒng)計(jì)功能(如核密度估計(jì))。
代碼示例:
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
# 讀取Excel數(shù)據(jù)
df = pd.read_excel("data.xlsx")
data = df["數(shù)值列"]
# 設(shè)置主題
sns.set_theme(style="whitegrid", font="SimHei") # 中文需指定字體
# 創(chuàng)建直方圖
plt.figure(figsize=(10, 6))
ax = sns.histplot(
data,
bins=10, # 區(qū)間數(shù)量
kde=True, # 顯示核密度曲線
color="skyblue", # 顏色
edgecolor="black", # 邊框顏色
stat="count" # 統(tǒng)計(jì)類型(默認(rèn)count,可選"density")
)
# 添加標(biāo)題和標(biāo)簽
ax.set_title("數(shù)值分布直方圖(帶核密度估計(jì))", fontsize=14)
ax.set_xlabel("數(shù)值范圍", fontsize=12)
ax.set_ylabel("頻數(shù)", fontsize=12)
# 顯示圖表
plt.tight_layout()
plt.savefig("seaborn_histogram.png")
plt.show()核心函數(shù)與參數(shù):
sns.histplot(): 直方圖繪制函數(shù)。kde: 是否顯示核密度估計(jì)曲線(默認(rèn)False)。stat: 統(tǒng)計(jì)類型("count"頻數(shù),"density"頻率,"percent"百分比)。bins/color/edgecolor: 同matplotlib。
sns.set_theme(): 設(shè)置主題樣式(如whitegrid、darkgrid)。
對(duì)比總結(jié)
| 庫(kù) | 特點(diǎn) | 適用場(chǎng)景 |
|---|---|---|
pyecharts | 需手動(dòng)計(jì)算頻數(shù),生成交互式圖表 | 需要網(wǎng)頁(yè)嵌入或動(dòng)態(tài)交互 |
matplotlib | 直接繪制,高度可定制 | 需要精細(xì)控制圖表細(xì)節(jié) |
seaborn | 語(yǔ)法簡(jiǎn)潔,支持核密度估計(jì) | 快速生成統(tǒng)計(jì)圖表 |
注意事項(xiàng)
- 數(shù)據(jù)預(yù)處理:確保 Excel 中的目標(biāo)列是數(shù)值類型(非字符串)。
- 區(qū)間劃分:調(diào)整
bins參數(shù)優(yōu)化數(shù)據(jù)分布展示(如bins=20增加細(xì)節(jié))。 - 交互性:
pyecharts適合生成 HTML 文件,而matplotlib/seaborn適合靜態(tài)圖片。
到此這篇關(guān)于Python讀取Excel繪制直方圖的文章就介紹到這了,更多相關(guān)Python讀取Excel繪制直方圖內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python2.7基于笛卡爾積算法實(shí)現(xiàn)N個(gè)數(shù)組的排列組合運(yùn)算示例
這篇文章主要介紹了Python2.7基于笛卡爾積算法實(shí)現(xiàn)N個(gè)數(shù)組的排列組合運(yùn)算,涉及Python笛卡爾積算法及排列組合操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2017-11-11
python動(dòng)態(tài)監(jiān)控日志內(nèi)容的示例
本文介紹如何使用Python動(dòng)態(tài)監(jiān)控程序日志的內(nèi)容,這里的動(dòng)態(tài)指的是日志文件不斷的追加新的日志內(nèi)容,動(dòng)態(tài)監(jiān)控是指監(jiān)控日志新追加的日志內(nèi)容2014-02-02
靈活運(yùn)用Python 枚舉類來(lái)實(shí)現(xiàn)設(shè)計(jì)狀態(tài)碼信息
在python中枚舉是一種類(Enum,IntEnum),存放在enum模塊中。枚舉類型可以給一組標(biāo)簽賦予一組特定的值,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09
Python實(shí)現(xiàn)Word文檔樣式批量處理
這篇文章主要為大家詳細(xì)介紹了如何利用Python中的python-docx非標(biāo)準(zhǔn)庫(kù)實(shí)現(xiàn)word文檔樣式批量處理,文中示例代碼講解詳細(xì),感興趣的可以了解一下2022-05-05
Python實(shí)現(xiàn)圖像手繪效果的方法詳解
這篇文章主要為大家詳細(xì)介紹了如何利用Python語(yǔ)言實(shí)現(xiàn)圖像手繪效果,文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,需要的可以參考一下2022-09-09
Python實(shí)戰(zhàn)基礎(chǔ)之Pandas統(tǒng)計(jì)某個(gè)數(shù)據(jù)列的空值個(gè)數(shù)
我們?cè)谔幚頂?shù)據(jù)的時(shí)候,經(jīng)常需要檢查數(shù)據(jù)的質(zhì)量,也需要知道出問(wèn)題的數(shù)據(jù)在哪個(gè)位置,下面這篇文章主要給大家介紹了關(guān)于Python實(shí)戰(zhàn)基礎(chǔ)之利用Pandas統(tǒng)計(jì)某個(gè)數(shù)據(jù)列空值個(gè)數(shù)的相關(guān)資料,需要的朋友可以參考下2022-08-08

