【无标题】认识Python的数据可视化

发布时间:2026/5/22 1:19:34

【无标题】认识Python的数据可视化 目录为什么需要数据可视化 10.箱线图Box Plot环境准备 — 安装与导入 11.热力图Heatmap折线图Line Chart 12.小提琴图Violin Plot实战岳阳 GDP 可视化 13.子图布局Subplots柱状图Bar Chart 14.面积图Area Chart水平柱状图Barh 15.雷达图Radar Chart散点图Scatter Plot 16.图表美化与定制技巧饼图Pie Chart 17.总结如何选择图表类型9.直方图Histogram​​​​​​一、为什么需要数据可视化看到下面两组数据哪个更好理解❌ 纯数字2007: 892.94, 2008: 1062.28,2009: 1240.53, 2010: 1440.88,2011: 1720.15, 2012: 1822.10,2013: 2062.03 ...后面就不想看了✅ 可视化一张折线图或柱状图趋势一目了然——GDP 从 893 亿到 5387 亿翻了多少倍、哪年跑最快3 秒就能读懂。核心思想人类的视觉系统每秒能处理约 1000 万比特信息远超过逐行读数字。数据可视化 把数据翻译成人脑最擅长理解的形状、颜色与空间关系。Python 可视化生态库用途特点matplotlib底层绘图引擎灵活度最高所有图的基础seaborn统计可视化基于 matplotlibAPI 更简洁默认配色美观plotly交互式图表可缩放、悬停提示适合网页pyecharts百度 ECharts 封装中国开发者友好图表类型丰富本教程聚焦最核心的两个库matplotlibseaborn。二、环境准备 — 安装与导入安装pip install matplotlib seaborn numpy基础导入模板import numpy as np # 数值计算 import matplotlib.pyplot as plt # 绘图核心 import seaborn as sns # 统计图表 美化 # 设置中文字体Windows plt.rcParams[font.sans-serif] [SimHei, Microsoft YaHei] plt.rcParams[axes.unicode_minus] False # 解决负号显示问题 # 全局样式 sns.set_style(whitegrid) # 白色网格背景 提示如果你的电脑上没有 SimHei 字体可以先运行import matplotlib.font_manager as fm; print([f.name for f in fm.fontManager.ttflist])查看已安装的字体然后替换为你有的中文字体名称。matplotlib 核心架构Figure画布— 整张图的顶层容器一个 Figure 可以放多个子图Axes坐标轴— 实际绘图的区域一个 Axes 一个坐标系 里面的图表Artist— 所有可见元素线条、文字、图例、刻度等的基类图1一张简单的折线图 1个Figure 1个Axes 多条Artist曲线、坐标轴、标题、图例…三、折线图Line Chart适用场景展示数据随时间变化的趋势比如股票价格、气温变化、GDP 增长。基础代码x np.linspace(0, 10, 50) # 0 到 10取 50 个点 y np.sin(x) # 正弦函数 plt.plot(x, y, color#2196F3, linewidth2.5, markero, markersize4, labely sin(x)) plt.title(折线图 — 正弦曲线, fontsize16, fontweightbold) plt.xlabel(x 轴) plt.ylabel(y 轴) plt.legend() plt.show()图1折线图蓝色半透明区域为fill_between填充效果核心参数说明参数含义示例color线条颜色#2196F3/redlinewidth线宽磅2.5marker数据点标记样式o圆点,s方块,^三角markersize标记大小4linestyle线型-实线,--虚线,-.点划线label图例标签y sin(x)四、实战岳阳 GDP 历年变化可视化这是一个双轴组合图——柱状图展示 GDP 总量左轴折线图展示同比增速右轴。多维度数据放在一张图里信息密度最大化。fig, ax1 plt.subplots(figsize(10, 5)) # 左轴柱状图 → GDP 总量 ax1.bar(years, gdp, color#E74C3C, alpha0.75, labelGDP总量亿元) ax1.set_ylabel(GDP亿元, color#E74C3C) ax1.tick_params(axisy, labelcolor#E74C3C) # 标注关键节点 for yr, v in zip(years, gdp): if yr in [2007, 2013, 2017, 2021, 2025]: ax1.text(yr, v 120, f{v:.0f}, hacenter, fontsize8) # 右轴折线图 → 增速 ax2 ax1.twinx() ax2.plot(years, growth, color#2980B9, linewidth2.5, markers, label同比增速%) ax2.set_ylabel(同比增速%, color#2980B9) plt.title(岳阳市 GDP 历年变化2007—2025) plt.show()图2双轴组合图 — 红色柱状图 GDP 总量蓝色折线 同比增速。关键年份2007/2013/2017/2021/2025已标注具体数值。 关键技巧 — twinx()ax2 ax1.twinx()创建一个与 ax1 共享 x 轴、但拥有独立 y 轴的新 Axes用于在同一张图上展示不同量纲的数据。从图中能读出什么GDP 总量 18 年间从893 亿 → 5387 亿增长约 6 倍2007—2011 年是高速增长期增速 13%2020 年增速最低4.1%疫情冲击2021 年强势反弹2024—2025 年稳定在 5% 左右进入高质量发展阶段五、柱状图Bar Chart适用场景对比不同类别之间的数值大小比如各部门产值、各产品销量排行。categories [农业, 工业, 建筑业, 批发零售, 交通运输, 金融业, 房地产] values [504, 1620, 278, 520, 380, 310, 450] colors [#27AE60,#2980B9,#8E44AD,#E67E22,#1ABC9C,#E74C3C,#F39C12] bars plt.bar(categories, values, colorcolors, width0.6, edgecolorwhite) for bar, v in zip(bars, values): # 数值标注 plt.text(bar.get_x() bar.get_width()/2, bar.get_height() 10, str(v), hacenter, fontweightbold) plt.title(各产业增加值亿元)图3柱状图每根柱子顶部标注了具体数值不同颜色区分不同产业。 小贴士给柱子加数值标注非常简单——遍历bars对象用bar.get_x() bar.get_width()/2定位 xbar.get_height()定位 y然后plt.text()写字即可。七、散点图Scatter Plot适用场景探索两个数值变量之间的关系正相关负相关聚类或做多维数据可视化颜色 大小 两个额外维度。x np.random.randn(120) * 10 60 # 变量 X y np.random.randn(120) * 12 70 # 变量 Y sizes np.abs(np.random.randn(120) * 80 200) # 气泡大小 colors np.random.rand(120) # 颜色强度 scatter plt.scatter(x, y, ssizes, ccolors, cmapcoolwarm, alpha0.7, edgecolorswhite) plt.colorbar(scatter, label颜色强度)图5气泡散点图x 轴和 y 轴展示两个变量关系气泡大小和颜色分别代表第三、第四个维度。气泡散点图Bubble Chart传统散点图只有 x-y 两个维度。加上s大小和c颜色最多可以在一张图上展示4 个维度的数据。八、饼图Pie Chart适用场景展示各部分占总体的比例如三产结构、市场份额、预算分配。⚠️ 注意饼图不适合过多类别建议 ≤ 6类别过多请改用柱状图。labels [第三产业, 第二产业, 第一产业] sizes [55.4, 35.2, 9.4] explode (0.05, 0, 0) # 突出显示第三产业 plt.pie(sizes, explodeexplode, labelslabels, colors[#3498DB,#E74C3C,#2ECC71], autopct%1.1f%%, shadowTrue, startangle140) plt.title(岳阳市 2025 年三产结构)图6岳阳三产结构饼图第三产业占比超 55%explode 参数让第三产业扇区突出显示。autopct%1.1f%%自动计算并显示百分比explode让某个扇区炸开以强调。九、直方图Histogram适用场景看一组数据的分布形态——是正态分布还是偏态集中在哪个区间有没有双峰data np.random.randn(2000) * 15 100 plt.hist(data, bins30, color#8E44AD, alpha0.75, edgecolorwhite) plt.axvline(np.mean(data), colorred, linestyle--, linewidth2, labelf均值 {np.mean(data):.1f}) plt.legend()图7正态分布直方图红色虚线标记了均值位置。30 个柱子紫色填充白色边框。 直方图 vs 柱状图长得像但本质不同——直方图展示连续数据的分布bins 决定分组柱状图展示离散类别的对比。直方图的柱子是连在一起的中间没有间隙。十、箱线图Box Plot适用场景快速对比多组数据的分布特征——中位数、四分位数、离散程度、异常值一张图全搞定。data {A组: np.random.randn(100)*1070, B组: np.random.randn(100)*875, C组: np.random.randn(100)*1265, D组: np.random.randn(100)*972} plt.boxplot(data.values(), labelsdata.keys(), patch_artistTrue, boxprops{facecolor:#85C1E9, alpha:0.7}, medianprops{color:#E74C3C, linewidth:2})图84 组数据的箱线图对比。红色粗线 中位数箱体 IQRQ1—Q3须线 1.5倍 IQR 范围须线外圆点 异常值。箱线图怎么看元素含义箱体中间的线中位数Median箱体上下边Q125%分位和 Q375%分位须线WhiskerQ1-1.5×IQR 到 Q31.5×IQR 范围须线外的圆点异常值Outlier十一、热力图Heatmap— seaborn适用场景相关性矩阵、混淆矩阵、二维密度——用颜色深浅直观展示矩阵中的数值大小。data np.random.rand(8, 8) # 8×8 随机矩阵 labels [指标A,指标B,指标C,指标D, 指标E,指标F,指标G,指标H] sns.heatmap(data, annotTrue, fmt.2f, cmapRdYlGn, center0.5, xticklabelslabels, yticklabelslabels, linewidths0.5)图9热力图每个格子标注了数值颜色从红→黄→绿渐变annotTrue显示数值。cmapRdYlGn是红-黄-绿配色方案适合展示低—中—高的对比。seaborn 内置了很多配色coolwarm冷—暖、Blues蓝色渐变、viridis翠绿色等。十二、小提琴图Violin Plot适用场景箱线图的升级版——不仅看中位数和四分位还能看到数据密度分布的形状单峰双峰偏态。data [np.random.randn(200)*530, # 春季 np.random.randn(200)*735, # 夏季 np.random.randn(200)*428, # 秋季 np.random.randn(200)*633] # 冬季 plt.violinplot(data, showmeansTrue, showmediansTrue)图10小提琴图宽的地方 数据密集腰细的地方 数据稀疏。白色点 中位数绿色三角 均值。小提琴图 vs 箱线图箱线图只给你 5 个统计量min, Q1, median, Q3, max小提琴图在此基础上还展示了分布的形状——数据是均匀分布还是集中在某一端一看宽度就知道。十三、子图布局Subplots适用场景需要对比多个图表或者一张画布放多种不同类型的图仪表盘效果。fig, axes plt.subplots(2, 2, figsize(10, 7)) # axes[0,0] — 左上 axes[0,0].plot(x, np.sin(x), color#E74C3C, linewidth2) # axes[0,1] — 右上 axes[0,1].bar([A,B,C,D], [23,45,56,78]) # axes[1,0] — 左下 axes[1,0].scatter(np.random.randn(50), np.random.randn(50)) # axes[1,1] — 右下 axes[1,1].hist(np.random.randn(300), bins20, color#1ABC9C) plt.tight_layout() # 自动调整间距图112×2 子图布局左上折线图、右上柱状图、左下散点图、右下直方图。tight_layout()自动避免标签重叠。 实用技巧plt.subplots(nrows, ncols)返回(fig, axes)axes 是一个二维数组。用axes[r][c].xxx()对每个子图单独绘图。最后别忘了plt.tight_layout()防止标签挤在一起。十四、面积图Area Chart适用场景展示多个组成部分随时间的变化以及它们占总量比例的变化趋势。years range(2007, 2026) plt.stackplot(years, primary, secondary, tertiary, labels[第一产业,第二产业,第三产业], colors[#2ECC71,#E74C3C,#3498DB], alpha0.8) plt.legend(locupper left)图12岳阳三大产业历年增加值面积图可以看出第三产业蓝色占GDP比重逐年上升。stackplot()的 y 参数依次传入多个数组图会自动堆叠。从图12能清晰看到岳阳经济从农业工业主导逐步转向服务业主导的转型过程。十五、雷达图Radar Chart适用场景多维度综合对比如城市综合实力、个人能力评估、产品多维度评分。categories [经济, 教育, 医疗, 交通, 环境, 科技] N len(categories) angles np.linspace(0, 2*np.pi, N, endpointFalse).tolist() angles angles[:1] # 闭合 values_a [85, 70, 75, 80, 65, 60] [85] # 首尾一致 values_b [78, 85, 68, 72, 70, 82] [78] ax plt.subplot(111, projectionpolar) ax.fill(angles, values_a, alpha0.3, color#E74C3C, label城市A) ax.plot(angles, values_a, color#E74C3C, linewidth2) ax.fill(angles, values_b, alpha0.3, color#3498DB, label城市B) ax.plot(angles, values_b, color#3498DB, linewidth2) ax.set_xticks(angles[:-1]) ax.set_xticklabels(categories)图13两城市综合对比雷达图城市A经济/交通更强城市B教育/科技更强。 雷达图关键必须用projectionpolar极坐标投影且数据首尾要一致values values[:1]以闭合多边形。十六、图表美化与定制技巧 配色方案# matplotlib 内置配色映射表 plt.scatter(x, y, cvalues, cmapviridis) # 翠绿色渐变 plt.hist(data, color#8E44AD) # 自定义 HEX 颜色 # seaborn 调色板 sns.set_palette(husl, 8) # 8 色调色板 sns.color_palette(pastel) # 柔色系 sns.color_palette(Set2) # ColorBrewer 色板 尺寸与分辨率plt.figure(figsize(10, 6), dpi150) # 10×6 英寸150 DPI plt.savefig(output.png, dpi300, bbox_inchestight) # 保存高清图️ 标题与标签plt.title(主标题, fontsize16, fontweightbold, pad20) plt.suptitle(总标题, fontsize20, fontweightbold) # 子图时用 plt.xlabel(X 轴标签, fontsize12, labelpad10) plt.ylabel(Y 轴标签, fontsize12, labelpad10) 图例定制plt.legend(locupper left, # 位置best/upper right/... frameonTrue, # 是否加边框 fancyboxTrue, # 圆角边框 shadowTrue, # 阴影 fontsize10) 坐标轴定制plt.xlim(0, 30) # X 轴范围 plt.ylim(-2, 2) # Y 轴范围 plt.xticks(np.arange(0, 31, 5)) # X 轴刻度间隔 plt.grid(True, linestyle--, alpha0.5) # 网格线 plt.axhline(y0, colorgray, linestyle-) # 水平参考线 plt.axvline(x5, colorred, linestyle--) # 垂直参考线 全局样式一键切换# seaborn 内置样式 sns.set_style(whitegrid) # 白色网格 sns.set_style(darkgrid) # 深色网格 sns.set_style(dark) # 深色背景 sns.set_style(ticks) # 刻度线风格 sns.set_style(white) # 纯白背景 # matplotlib 样式表 plt.style.use(ggplot) # R 语言 ggplot 风格 plt.style.use(fivethirtyeight) # FiveThirtyEight 网站风格 plt.style.use(seaborn-v0_8-darkgrid) print(plt.style.available) # 查看所有可用样式 数据标注# 在指定位置添加文字 plt.text(x, y, 文字内容, fontsize10, hacenter, vabottom) # 带箭头的注释 plt.annotate(峰值, xy(5, 0.9), xytext(6, 0.5), arrowpropsdict(arrowstyle-, colorred)) # 数值标记柱状图顶部常用 for bar in bars: plt.text(bar.get_x() bar.get_width()/2, bar.get_height() offset, str(bar.get_height()), hacenter)十七、总结如何选择图表类型 看趋势折线图、面积图例GDP 历年变化、股票走势 比大小柱状图、水平柱状图例各城市 GDP 排名、各部门产值 看关系散点图、气泡图例收入 vs 消费、身高 vs 体重 看占比饼图、环形图例产业结构、市场份额 看分布直方图、箱线图、小提琴图例成绩分布、收入分布️ 看矩阵热力图例相关性矩阵、混淆矩阵⭐ 看多维雷达图例城市综合评分、能力评估️ 综合仪表盘子图布局Subplots例一页放多种图表 速查表需求推荐图表核心函数库趋势变化折线图plt.plot()matplotlib类别对比柱状图plt.bar() / plt.barh()matplotlib两变量关系散点图plt.scatter()matplotlib部分与整体饼图plt.pie()matplotlib数据分布直方图plt.hist()matplotlib多组分布对比箱线图plt.boxplot()matplotlib分布密度小提琴图plt.violinplot()matplotlib矩阵热力热力图sns.heatmap()seaborn堆叠趋势面积图plt.stackplot()matplotlib多维比较雷达图plt.subplot(projectionpolar)matplotlib多图并排子图布局plt.subplots()matplotlib

相关新闻