以下将详细介绍如何使用 Python 的 pyecharts
、matplotlib
和 seaborn
三个库从 Excel 中读取数据并绘制直方图(Histogram)。直方图用于展示数据分布,核心是统计不同区间的频数或频率。每个库的代码示例均包含核心类、函数和属性的详细说明。
1. 使用 pyecharts 绘制直方图
pyecharts
是基于 ECharts 的交互式可视化库,但需手动计算直方图的频数分布(因无内置直方图函数)。
代码示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | import pandas as pd import numpy as np from pyecharts.charts import Bar from pyecharts import options as opts # 读取Excel数据 df = pd.read_excel( "data.xlsx" ) data = df[ "数值列" ].tolist() # 假设数据列名为"数值列" # 计算直方图的区间和频数 counts, bins = np.histogram(data, bins = 10 ) # 分10个区间 x_labels = [f "{bins[i]:.1f}-{bins[i+1]:.1f}" for i in range ( len (bins) - 1 )] # 创建柱状图(模拟直方图) bar = Bar() bar.add_xaxis(x_labels) bar.add_yaxis( "频数" , counts.tolist()) # 配置全局选项 bar.set_global_opts( title_opts = opts.TitleOpts(title = "数值分布直方图" ), xaxis_opts = opts.AxisOpts(name = "区间" ), yaxis_opts = opts.AxisOpts(name = "频数" ), toolbox_opts = opts.ToolboxOpts() ) # 渲染为HTML文件 bar.render( "pyecharts_histogram.html" ) |
核心类与函数:
-
Bar()
: 柱状图对象,用于模拟直方图。 -
np.histogram()
: 计算直方图频数和区间(bins
指定区间数量)。 -
add_xaxis()
/add_yaxis()
: 添加 X/Y 轴数据。 -
set_global_opts()
: 配置标题、坐标轴名称等。
2. 使用 matplotlib 绘制直方图
matplotlib
是基础绘图库,内置 hist()
函数直接绘制直方图。
代码示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | import pandas as pd import matplotlib.pyplot as plt # 读取Excel数据 df = pd.read_excel( "data.xlsx" ) data = df[ "数值列" ] # 创建画布和坐标系 fig, ax = plt.subplots(figsize = ( 10 , 6 )) # 绘制直方图 ax.hist( data, bins = 10 , # 区间数量 color = "skyblue" , # 颜色 edgecolor = "black" , # 边框颜色 alpha = 0.7 , # 透明度 density = False # False显示频数,True显示频率 ) # 添加标题和标签 ax.set_title( "数值分布直方图" , fontsize = 14 ) ax.set_xlabel( "数值范围" , fontsize = 12 ) ax.set_ylabel( "频数" , fontsize = 12 ) ax.grid(axis = "y" , linestyle = "--" ) # 显示横向网格线 # 显示图表 plt.tight_layout() plt.savefig( "matplotlib_histogram.png" ) plt.show() |
核心函数与参数:
-
ax.hist()
: 直方图绘制函数。-
bins
: 区间数量或具体边界值(如bins=[0, 10, 20]
)。 -
color
/edgecolor
: 填充色和边框颜色。 -
alpha
: 透明度(0-1)。 -
density
: 是否显示频率(归一化)。
-
-
ax.set_title()
/ax.set_xlabel()
/ax.set_ylabel()
: 标题和坐标轴标签。
3. 使用 seaborn 绘制直方图
seaborn
基于 matplotlib
,提供更简洁的语法和统计功能(如核密度估计)。
代码示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | import pandas as pd import seaborn as sns import matplotlib.pyplot as plt # 读取Excel数据 df = pd.read_excel( "data.xlsx" ) data = df[ "数值列" ] # 设置主题 sns.set_theme(style = "whitegrid" , font = "SimHei" ) # 中文需指定字体 # 创建直方图 plt.figure(figsize = ( 10 , 6 )) ax = sns.histplot( data, bins = 10 , # 区间数量 kde = True , # 显示核密度曲线 color = "skyblue" , # 颜色 edgecolor = "black" , # 边框颜色 stat = "count" # 统计类型(默认count,可选"density") ) # 添加标题和标签 ax.set_title( "数值分布直方图(带核密度估计)" , fontsize = 14 ) ax.set_xlabel( "数值范围" , fontsize = 12 ) ax.set_ylabel( "频数" , fontsize = 12 ) # 显示图表 plt.tight_layout() plt.savefig( "seaborn_histogram.png" ) plt.show() |
核心函数与参数:
-
sns.histplot()
: 直方图绘制函数。-
kde
: 是否显示核密度估计曲线(默认False
)。 -
stat
: 统计类型("count"
频数,"density"
频率,"percent"
百分比)。 -
bins
/color
/edgecolor
: 同matplotlib
。
-
-
sns.set_theme()
: 设置主题样式(如whitegrid
、darkgrid
)。
对比总结
库 | 特点 | 适用场景 |
---|---|---|
pyecharts |
需手动计算频数,生成交互式图表 | 需要网页嵌入或动态交互 |
matplotlib |
直接绘制,高度可定制 | 需要精细控制图表细节 |
seaborn |
语法简洁,支持核密度估计 | 快速生成统计图表 |
注意事项
- 数据预处理:确保 Excel 中的目标列是数值类型(非字符串)。
-
区间划分:调整
bins
参数优化数据分布展示(如bins=20
增加细节)。 -
交互性:
pyecharts
适合生成 HTML 文件,而matplotlib
/seaborn
适合静态图片。
到此这篇关于Python读取Excel绘制直方图的文章就介绍到这了,更多相关Python读取Excel绘制直方图内容请搜索IT俱乐部以前的文章或继续浏览下面的相关文章希望大家以后多多支持IT俱乐部!