前言数据可视化是数据分析、数据挖掘、商业智能 BI、数据大屏、机器学习结果展示中非常重要的一环。简单来说数据可视化就是将结构化或非结构化数据通过图形、颜色、位置、大小、形状、文字等视觉元素进行编码从而让用户能够更直观地理解数据背后的规律。本文将系统总结数据可视化的核心知识点并结合 Python 代码进行演示适合初学者学习也适合作为期末作业、课程设计、数据分析项目文档参考。一、数据可视化定义与价值知识点说明数据可视化是指将数据转换为图形形式的过程目的是让复杂数据更加直观、清晰、易理解。它的核心价值包括挖掘数据规律对比不同类别差异展示时间变化趋势定位异常值辅助业务决策提高数据表达效率示例代码用柱状图直观展示销售额对比import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False products [手机, 电脑, 平板, 耳机, 手表] sales [120, 180, 90, 150, 110] plt.figure(figsize(8, 5)) plt.bar(products, sales) plt.title(不同商品销售额对比) plt.xlabel(商品类型) plt.ylabel(销售额 / 万元) for i, value in enumerate(sales): plt.text(i, value 3, str(value), hacenter) plt.tight_layout() plt.show()效果图二、数据可视化设计核心原则知识点说明优秀的数据可视化不仅要“好看”更要“准确”和“有效”。常见设计原则包括原则含义清晰性图表要让读者快速理解主题简洁性删除无意义装饰避免信息干扰可读性文字、坐标轴、图例要清楚客观性不夸大、不误导数据关系美观性配色协调、布局合理示例代码简洁清晰的折线图设计import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False months [1月, 2月, 3月, 4月, 5月, 6月] sales [80, 95, 120, 150, 170, 210] plt.figure(figsize(8, 5)) plt.plot(months, sales, markero, linewidth2) plt.title(上半年销售额变化趋势) plt.xlabel(月份) plt.ylabel(销售额 / 万元) plt.grid(alpha0.3) for x, y in zip(months, sales): plt.text(x, y 3, y, hacenter) plt.tight_layout() plt.show()效果图三、数据可视化常见误区知识点说明数据可视化中常见误区包括滥用 3D 图表截断坐标轴导致误导配色混乱信息过度堆叠图表类型选择错误图例、单位、标题缺失示例代码展示截断坐标轴的误导风险import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False companies [A公司, B公司, C公司] profits [95, 100, 105] plt.figure(figsize(8, 5)) plt.bar(companies, profits) plt.title(利润对比注意不要随意截断坐标轴) plt.xlabel(公司) plt.ylabel(利润 / 万元) # 不建议随意使用下面这种写法会放大差异 # plt.ylim(90, 110) plt.ylim(0, 120) for i, value in enumerate(profits): plt.text(i, value 2, value, hacenter) plt.tight_layout() plt.show()四、四大基础数据类型与图表选型1. 分类离散数据知识点说明分类离散数据指没有连续数值关系、通常表示类别的数据例如城市、商品、性别、品牌等。适合图表柱状图条形图饼图环形图示例代码柱状图展示城市销量import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False cities [北京, 上海, 广州, 深圳, 杭州] sales [230, 280, 190, 260, 210] plt.figure(figsize(8, 5)) plt.bar(cities, sales) plt.title(不同城市销售额对比) plt.xlabel(城市) plt.ylabel(销售额 / 万元) for i, value in enumerate(sales): plt.text(i, value 5, value, hacenter) plt.tight_layout() plt.show()效果图2. 时序数据知识点说明时序数据是带有时间维度的数据例如每日销量、月度收入、年度用户增长等。适合图表折线图面积图时序动态图多折线趋势图示例代码折线图展示月度销售趋势import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False months [1月, 2月, 3月, 4月, 5月, 6月] sales [120, 135, 160, 150, 180, 220] plt.figure(figsize(8, 5)) plt.plot(months, sales, markero) plt.title(月度销售额变化趋势) plt.xlabel(月份) plt.ylabel(销售额 / 万元) plt.grid(alpha0.3) plt.tight_layout() plt.show()效果图3. 连续数值数据知识点说明连续数值数据是可以度量、可以计算的数据例如利润、销售额、身高、温度、价格等。适合图表直方图箱线图散点图密度图示例代码直方图展示用户消费金额分布import numpy as np import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False np.random.seed(42) amounts np.random.normal(loc500, scale120, size300) plt.figure(figsize(8, 5)) plt.hist(amounts, bins20, edgecolorblack) plt.title(用户消费金额分布) plt.xlabel(消费金额 / 元) plt.ylabel(用户数量) plt.tight_layout() plt.show()效果图4. 地理空间数据知识点说明地理空间数据带有地域、经纬度、行政区划等信息例如各省销售额、城市人口密度、用户分布等。适合图表基础地图热力地图迁徙地图气泡地图示例代码Pyecharts 绘制中国地图from pyecharts.charts import Map from pyecharts import options as opts data [ (广东, 1200), (浙江, 900), (江苏, 1000), (山东, 850), (四川, 760) ] map_chart ( Map() .add(销售额, data, china) .set_global_opts( title_optsopts.TitleOpts(title各省销售额分布), visualmap_optsopts.VisualMapOpts(max_1200) ) ) map_chart.render(china_sales_map.html)效果图预留五、视觉编码规范1. 位置编码知识点说明位置编码是最直观、最准确的视觉编码方式。常见于坐标轴图表如折线图、散点图、柱状图。示例代码散点图中的位置编码import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False ad_cost [10, 20, 30, 40, 50, 60] sales [80, 110, 150, 170, 210, 250] plt.figure(figsize(8, 5)) plt.scatter(ad_cost, sales, s80) plt.title(广告投入与销售额关系) plt.xlabel(广告投入 / 万元) plt.ylabel(销售额 / 万元) plt.grid(alpha0.3) plt.tight_layout() plt.show()效果图2. 长度编码知识点说明长度编码通常用于柱状图和条形图通过柱子的长短表示数值大小。示例代码条形图展示类别对比import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False categories [线上直营渠道, 线下门店渠道, 代理商渠道, 社交电商渠道] values [300, 220, 180, 260] plt.figure(figsize(9, 5)) plt.barh(categories, values) plt.title(不同销售渠道业绩对比) plt.xlabel(销售额 / 万元) for i, value in enumerate(values): plt.text(value 5, i, value, vacenter) plt.tight_layout() plt.show()效果图3. 色彩编码知识点说明色彩可以用于区分类别也可以表示数值高低。分类数据适合使用不同颜色连续数据适合使用渐变色。示例代码热力图展示相关系数import pandas as pd import seaborn as sns import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False data pd.DataFrame({ 销售额: [100, 120, 130, 160, 180], 广告费: [20, 25, 27, 35, 40], 客流量: [300, 330, 350, 390, 420], 利润: [30, 36, 40, 55, 63] }) corr data.corr() plt.figure(figsize(7, 5)) sns.heatmap(corr, annotTrue, cmapBlues) plt.title(指标相关系数热力图) plt.tight_layout() plt.show()效果图4. 形状编码知识点说明形状编码常用于散点图中用不同 marker 区分不同类别。示例代码不同形状表示不同用户类型import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False x1, y1 [1, 2, 3], [4, 5, 6] x2, y2 [1, 2, 3], [6, 7, 8] plt.figure(figsize(8, 5)) plt.scatter(x1, y1, markero, s100, label普通用户) plt.scatter(x2, y2, marker^, s100, label会员用户) plt.title(不同用户类型散点图) plt.xlabel(访问次数) plt.ylabel(购买金额) plt.legend() plt.tight_layout() plt.show()效果图5. 文字编码知识点说明文字编码用于补充图表信息例如标题、坐标轴、图例、数据标签、重点说明等。示例代码为柱状图添加文字标签import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False names [A产品, B产品, C产品] values [120, 180, 150] plt.figure(figsize(7, 5)) plt.bar(names, values) plt.title(产品销量对比) plt.xlabel(产品) plt.ylabel(销量 / 件) for i, value in enumerate(values): plt.text(i, value 5, f{value}件, hacenter) plt.tight_layout() plt.show()效果图六、色彩设计规范1. 专业配色知识点说明专业图表通常使用低饱和度配色避免过于刺眼的颜色。常见商务图表中可以使用蓝色、灰色、绿色等稳定色系。示例代码低饱和配色柱状图import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False departments [市场部, 销售部, 研发部, 客服部] scores [85, 92, 88, 80] colors [#4C72B0, #55A868, #8172B2, #64B5CD] plt.figure(figsize(8, 5)) plt.bar(departments, scores, colorcolors) plt.title(部门绩效评分) plt.xlabel(部门) plt.ylabel(评分) plt.tight_layout() plt.show()效果图2. 色盲友好配色知识点说明不要只用红色和绿色区分数据因为红绿色盲用户可能无法准确识别。可以使用蓝色、橙色、紫色等对比更清晰的颜色。示例代码避免红绿单一区分import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False labels [完成, 未完成] values [70, 30] colors [#0072B2, #E69F00] plt.figure(figsize(6, 6)) plt.pie(values, labelslabels, autopct%1.1f%%, colorscolors, startangle90) plt.title(任务完成情况) plt.tight_layout() plt.show()效果图七、主流图表分类与适用场景1. 柱状图知识点说明柱状图适合展示多个类别之间的数值大小对比。示例代码import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False brands [品牌A, 品牌B, 品牌C, 品牌D] sales [300, 450, 280, 390] plt.figure(figsize(8, 5)) plt.bar(brands, sales) plt.title(品牌销售额对比) plt.xlabel(品牌) plt.ylabel(销售额 / 万元) plt.tight_layout() plt.show()效果图2. 条形图知识点说明当类别名称较长时条形图比柱状图更合适可以避免文字重叠。示例代码import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False items [智能家居控制系统, 企业级数据分析平台, 移动端营销工具, 客户关系管理系统] values [90, 120, 80, 110] plt.figure(figsize(9, 5)) plt.barh(items, values) plt.title(不同项目收入对比) plt.xlabel(收入 / 万元) plt.tight_layout() plt.show()效果图3. 分组柱状图知识点说明分组柱状图适合在同一类别下比较多组数据例如不同年份、不同渠道、不同地区之间的差异。示例代码import numpy as np import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False quarters [Q1, Q2, Q3, Q4] sales_2024 [120, 150, 180, 200] sales_2025 [140, 170, 190, 230] x np.arange(len(quarters)) width 0.35 plt.figure(figsize(8, 5)) plt.bar(x - width / 2, sales_2024, width, label2024年) plt.bar(x width / 2, sales_2025, width, label2025年) plt.title(不同年份季度销售额对比) plt.xlabel(季度) plt.ylabel(销售额 / 万元) plt.xticks(x, quarters) plt.legend() plt.tight_layout() plt.show()效果图4. 堆叠柱状图知识点说明堆叠柱状图可以同时展示整体总量和各部分构成。示例代码import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False months [1月, 2月, 3月, 4月] online [100, 120, 130, 150] offline [80, 90, 100, 110] plt.figure(figsize(8, 5)) plt.bar(months, online, label线上销售) plt.bar(months, offline, bottomonline, label线下销售) plt.title(线上与线下销售额堆叠图) plt.xlabel(月份) plt.ylabel(销售额 / 万元) plt.legend() plt.tight_layout() plt.show()效果图5. 折线图知识点说明折线图主要用于展示数据随时间变化的趋势。示例代码import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False days [周一, 周二, 周三, 周四, 周五, 周六, 周日] visits [1200, 1500, 1700, 1600, 2000, 2600, 2400] plt.figure(figsize(8, 5)) plt.plot(days, visits, markero) plt.title(网站一周访问量趋势) plt.xlabel(日期) plt.ylabel(访问量) plt.grid(alpha0.3) plt.tight_layout() plt.show()效果图6. 面积图知识点说明面积图是折线图的扩展可以强调数值体量变化。示例代码import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False months [1月, 2月, 3月, 4月, 5月] users [1000, 1500, 2300, 2800, 3500] plt.figure(figsize(8, 5)) plt.plot(months, users) plt.fill_between(months, users, alpha0.3) plt.title(用户数量增长面积图) plt.xlabel(月份) plt.ylabel(用户数量) plt.tight_layout() plt.show()效果图7. 饼图 / 环形图知识点说明饼图适合展示单一维度下各分类占整体的比例。分类数量不宜过多一般建议控制在 5 个以内。示例代码环形图import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False labels [服装, 数码, 食品, 家居] values [35, 25, 20, 20] plt.figure(figsize(6, 6)) plt.pie(values, labelslabels, autopct%1.1f%%, startangle90) circle plt.Circle((0, 0), 0.5, colorwhite) plt.gca().add_artist(circle) plt.title(商品类别销售占比) plt.text(0, 0, 销售占比, hacenter, vacenter, fontsize14) plt.tight_layout() plt.show()效果图8. 直方图知识点说明直方图适合展示连续数值数据的分布频率。示例代码import numpy as np import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False scores np.random.normal(75, 10, 200) plt.figure(figsize(8, 5)) plt.hist(scores, bins15, edgecolorblack) plt.title(学生成绩分布直方图) plt.xlabel(成绩) plt.ylabel(人数) plt.tight_layout() plt.show()效果图9. 箱线图知识点说明箱线图可以展示数据的中位数、上下四分位数、极值和异常值常用于异常值分析。示例代码import numpy as np import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False data [ np.random.normal(80, 8, 100), np.random.normal(75, 12, 100), np.random.normal(85, 6, 100) ] plt.figure(figsize(8, 5)) plt.boxplot(data, labels[一班, 二班, 三班]) plt.title(不同班级成绩箱线图) plt.xlabel(班级) plt.ylabel(成绩) plt.tight_layout() plt.show()效果图10. 散点图知识点说明散点图适合分析两个连续变量之间的关系例如广告投入与销售额、身高与体重等。示例代码import numpy as np import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False ad_cost np.random.randint(10, 100, 50) sales ad_cost * 3 np.random.randint(-30, 30, 50) plt.figure(figsize(8, 5)) plt.scatter(ad_cost, sales) plt.title(广告投入与销售额相关性分析) plt.xlabel(广告投入 / 万元) plt.ylabel(销售额 / 万元) plt.tight_layout() plt.show()效果图11. 热力图知识点说明热力图适合展示矩阵数据常见场景包括相关系数矩阵、用户行为密度、地区热度等。示例代码import numpy as np import seaborn as sns import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False matrix np.random.randint(1, 100, size(5, 5)) plt.figure(figsize(7, 5)) sns.heatmap(matrix, annotTrue, cmapYlGnBu) plt.title(用户行为热力图) plt.xlabel(页面模块) plt.ylabel(用户类型) plt.tight_layout() plt.show()效果图12. 雷达图知识点说明雷达图适合展示多个指标的综合评分对比例如能力模型、产品评分、企业竞争力分析等。示例代码import numpy as np import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False labels [价格, 质量, 服务, 物流, 口碑] values [80, 90, 75, 85, 88] angles np.linspace(0, 2 * np.pi, len(labels), endpointFalse) values np.concatenate((values, [values[0]])) angles np.concatenate((angles, [angles[0]])) plt.figure(figsize(6, 6)) ax plt.subplot(111, polarTrue) ax.plot(angles, values, markero) ax.fill(angles, values, alpha0.25) ax.set_thetagrids(angles[:-1] * 180 / np.pi, labels) ax.set_title(产品综合评分雷达图) plt.tight_layout() plt.show()效果图13. 词云图知识点说明词云图适合展示文本数据中高频词汇常用于评论分析、舆情分析、文章关键词提取等。示例代码from wordcloud import WordCloud import matplotlib.pyplot as plt text 数据分析 数据可视化 Python 图表 数据分析 可视化 机器学习 商业智能 数据大屏 用户画像 统计分析 wordcloud WordCloud( font_pathsimhei.ttf, width800, height400, background_colorwhite ).generate(text) plt.figure(figsize(10, 5)) plt.imshow(wordcloud) plt.axis(off) plt.title(数据分析关键词词云图) plt.show()效果图八、图表文字与标注专项知识点1. 图表标题、坐标轴与图例知识点说明完整图表通常应包含图表标题X 轴标签Y 轴标签图例单位说明示例代码import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False months [1月, 2月, 3月] online [100, 120, 150] offline [80, 90, 110] plt.figure(figsize(8, 5)) plt.plot(months, online, markero, label线上) plt.plot(months, offline, markers, label线下) plt.title(线上与线下销售趋势对比) plt.xlabel(月份) plt.ylabel(销售额 / 万元) plt.legend() plt.tight_layout() plt.show()效果图2. plt.text 静态文字标注知识点说明plt.text()可以在图表指定坐标位置添加文字说明。示例代码import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False x [1, 2, 3, 4, 5] y [10, 15, 13, 20, 18] plt.figure(figsize(8, 5)) plt.plot(x, y, markero) plt.text(4, 20, 最高点, fontsize12) plt.title(plt.text 静态文字标注示例) plt.xlabel(时间) plt.ylabel(数值) plt.tight_layout() plt.show()效果图3. 批量数值标注知识点说明批量标注常用于柱状图顶部或折线图拐点方便读者直接查看原始数值。示例代码import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False products [A, B, C, D] sales [120, 180, 150, 200] plt.figure(figsize(8, 5)) plt.bar(products, sales) for i, value in enumerate(sales): plt.text(i, value 5, str(value), hacenter) plt.title(柱状图批量数值标注) plt.xlabel(产品) plt.ylabel(销量) plt.tight_layout() plt.show()效果图4. plt.annotate 箭头注释知识点说明plt.annotate()可以添加带箭头的注释用于突出极值、异常点、关键节点。示例代码import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False months [1月, 2月, 3月, 4月, 5月] sales [100, 120, 90, 180, 160] plt.figure(figsize(8, 5)) plt.plot(months, sales, markero) plt.annotate( 促销活动后销售激增, xy(4月, 180), xytext(3月, 200), arrowpropsdict(arrowstyle-) ) plt.title(箭头注释标注关键数据) plt.xlabel(月份) plt.ylabel(销售额) plt.tight_layout() plt.show()效果图九、Python 数据可视化工具栈1. Matplotlib知识点说明Matplotlib 是 Python 最基础、最常用的静态绘图库适合绘制折线图、柱状图、饼图、散点图等基础图表。示例代码import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False x [1, 2, 3, 4] y [10, 20, 15, 25] plt.figure(figsize(7, 5)) plt.plot(x, y, markero) plt.title(Matplotlib 基础折线图) plt.xlabel(X轴) plt.ylabel(Y轴) plt.tight_layout() plt.savefig(matplotlib_line.png, dpi300) plt.show()效果图2. Seaborn知识点说明Seaborn 基于 Matplotlib提供了高级接口来绘制美观且信息丰富的统计图形。适合绘制统计图表内置美化主题代码更简洁。示例代码import seaborn as sns import matplotlib.pyplot as plt import pandas as pd # 示例数据 df pd.DataFrame({ Category: [A, B, C, D], Value: [4, 7, 1, 8] }) # 设置主题 sns.set_theme(styledarkgrid, paletteSet2) # 绘制柱状图 sns.barplot(xCategory, yValue, datadf) plt.title(Category Values) plt.show()效果图3. Plotly知识点说明Plotly 是交互式可视化库支持缩放、拖拽、悬浮提示、一键下载图片等功能适合网页可视化和数据分析报告。示例代码import plotly.express as px import pandas as pd data pd.DataFrame({ 月份: [1月, 2月, 3月, 4月, 5月], 销售额: [100, 120, 150, 130, 180] }) fig px.line( data, x月份, y销售额, markersTrue, titlePlotly 交互式折线图 ) fig.show()效果图4. Pyecharts知识点说明Pyecharts 是 ECharts 的 Python 封装适合制作地图、仪表盘、大屏可视化和交互式 HTML 图表。示例代码仪表盘from pyecharts.charts import Gauge from pyecharts import options as opts gauge ( Gauge() .add(, [(完成率, 76.5)]) .set_global_opts(title_optsopts.TitleOpts(title项目完成率仪表盘)) ) gauge.render(gauge.html)效果图5. Pandas 与 NumPy 数据预处理知识点说明在绘图之前通常需要先进行数据预处理例如读取数据、清洗缺失值、分组统计、时间转换等。示例代码import pandas as pd data pd.DataFrame({ 城市: [北京, 上海, 北京, 广州, 上海], 销售额: [100, 150, 120, 90, 180] }) result data.groupby(城市)[销售额].sum().reset_index() print(result)效果图十、图表选型方法1. 按分析目的选择图表知识点说明图表选型不能只看美观要根据分析目的选择分析目的推荐图表对比大小柱状图、条形图展示趋势折线图、面积图展示占比饼图、环形图、堆叠柱状图展示分布直方图、箱线图展示相关性散点图、热力图展示地理分布地图、热力地图展示多指标评分雷达图示例代码根据分析目的自动选择图表类型def choose_chart(purpose): chart_map { 对比: 柱状图 / 条形图, 趋势: 折线图 / 面积图, 占比: 饼图 / 环形图, 分布: 直方图 / 箱线图, 相关性: 散点图 / 热力图, 地理: 地图 / 热力地图, 多指标: 雷达图 } return chart_map.get(purpose, 请根据数据类型进一步判断) print(choose_chart(趋势)) print(choose_chart(相关性))效果图十一、数据分析到可视化的完整流程知识点说明完整的数据可视化流程通常包括明确分析目标收集数据数据清洗数据统计分析选择图表类型设计视觉编码添加标题、单位、注释导出图片或 HTML形成分析结论示例代码从数据处理到绘图完整流程import pandas as pd import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False data pd.DataFrame({ 月份: [1月, 1月, 2月, 2月, 3月, 3月], 渠道: [线上, 线下, 线上, 线下, 线上, 线下], 销售额: [100, 80, 130, 90, 160, 110] }) summary data.groupby(月份)[销售额].sum().reset_index() plt.figure(figsize(8, 5)) plt.plot(summary[月份], summary[销售额], markero) plt.title(月度总销售额趋势) plt.xlabel(月份) plt.ylabel(销售额 / 万元) for x, y in zip(summary[月份], summary[销售额]): plt.text(x, y 5, y, hacenter) plt.tight_layout() plt.savefig(sales_trend.png, dpi300) plt.show()效果图十二、可视化大屏设计知识点说明数据大屏常用于实时监控、业务展示、企业驾驶舱等场景。其特点是多图表组合、多指标联动、强调视觉冲击力和实时性。常见组成核心指标卡片趋势折线图地图分布排名柱状图环形占比图实时明细表格示例代码Pyecharts 多图表组合from pyecharts.charts import Bar, Line, Page from pyecharts import options as opts bar ( Bar() .add_xaxis([北京, 上海, 广州, 深圳]) .add_yaxis(销售额, [300, 420, 280, 390]) .set_global_opts(title_optsopts.TitleOpts(title城市销售排名)) ) line ( Line() .add_xaxis([1月, 2月, 3月, 4月]) .add_yaxis(销售额, [100, 130, 160, 200]) .set_global_opts(title_optsopts.TitleOpts(title销售趋势)) ) page Page() page.add(bar, line) page.render(dashboard.html)效果图十三、图表导出与保存知识点说明图表通常需要保存为图片或 HTML 文件方便插入论文、报告、PPT、CSDN 博客或网页中。常见导出格式PNGJPGSVGPDFHTML示例代码Matplotlib 保存高清图片import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False x [A, B, C] y [100, 150, 130] plt.figure(figsize(7, 5)) plt.bar(x, y) plt.title(高清图片导出示例) plt.xlabel(类别) plt.ylabel(数值) plt.tight_layout() plt.savefig(chart.png, dpi300, bbox_inchestight) plt.show()十四、中文乱码与负号异常解决知识点说明使用 Matplotlib 绘制中文图表时常见问题包括中文显示为方框负号无法正常显示保存图片后中文乱码解决方法是设置中文字体和负号显示参数。示例代码plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False十五、交互式悬浮提示知识点说明交互式图表可以在鼠标悬浮时展示详细数据适合数据分析报告和网页展示。示例代码Plotly 悬浮提示import plotly.express as px import pandas as pd data pd.DataFrame({ 城市: [北京, 上海, 广州, 深圳], 销售额: [300, 420, 280, 390], 利润: [80, 120, 70, 100] }) fig px.scatter( data, x销售额, y利润, text城市, size销售额, hover_data[城市, 销售额, 利润], title城市销售额与利润交互式散点图 ) fig.show()效果图十六、总结数据可视化不是简单地“把数据画出来”而是一个从数据理解、图表选择、视觉编码、配色设计、文字标注到结果表达的完整过程。本文总结了以下核心内容数据可视化的定义与价值数据可视化设计原则四大基础数据类型视觉编码规范色彩设计规范主流图表分类与适用场景图表文字与标注方法Matplotlib、Seaborn、Plotly、Pyecharts 工具栈数据预处理方法图表选型方法数据大屏设计图表导出与保存中文乱码问题解决交互式图表设计掌握这些知识后就可以根据不同业务场景选择合适的图表并使用 Python 快速完成专业的数据可视化分析。附常用库安装命令pip install matplotlib seaborn pandas numpy plotly pyecharts wordcloud附推荐学习路线先掌握 Matplotlib 基础绘图再学习 Seaborn 统计图表学习 Pandas 数据清洗与分组统计学习 Plotly 交互式图表学习 Pyecharts 地图与大屏最后结合真实数据完成综合项目
Python 数据可视化
发布时间:2026/6/10 13:49:24
前言数据可视化是数据分析、数据挖掘、商业智能 BI、数据大屏、机器学习结果展示中非常重要的一环。简单来说数据可视化就是将结构化或非结构化数据通过图形、颜色、位置、大小、形状、文字等视觉元素进行编码从而让用户能够更直观地理解数据背后的规律。本文将系统总结数据可视化的核心知识点并结合 Python 代码进行演示适合初学者学习也适合作为期末作业、课程设计、数据分析项目文档参考。一、数据可视化定义与价值知识点说明数据可视化是指将数据转换为图形形式的过程目的是让复杂数据更加直观、清晰、易理解。它的核心价值包括挖掘数据规律对比不同类别差异展示时间变化趋势定位异常值辅助业务决策提高数据表达效率示例代码用柱状图直观展示销售额对比import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False products [手机, 电脑, 平板, 耳机, 手表] sales [120, 180, 90, 150, 110] plt.figure(figsize(8, 5)) plt.bar(products, sales) plt.title(不同商品销售额对比) plt.xlabel(商品类型) plt.ylabel(销售额 / 万元) for i, value in enumerate(sales): plt.text(i, value 3, str(value), hacenter) plt.tight_layout() plt.show()效果图二、数据可视化设计核心原则知识点说明优秀的数据可视化不仅要“好看”更要“准确”和“有效”。常见设计原则包括原则含义清晰性图表要让读者快速理解主题简洁性删除无意义装饰避免信息干扰可读性文字、坐标轴、图例要清楚客观性不夸大、不误导数据关系美观性配色协调、布局合理示例代码简洁清晰的折线图设计import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False months [1月, 2月, 3月, 4月, 5月, 6月] sales [80, 95, 120, 150, 170, 210] plt.figure(figsize(8, 5)) plt.plot(months, sales, markero, linewidth2) plt.title(上半年销售额变化趋势) plt.xlabel(月份) plt.ylabel(销售额 / 万元) plt.grid(alpha0.3) for x, y in zip(months, sales): plt.text(x, y 3, y, hacenter) plt.tight_layout() plt.show()效果图三、数据可视化常见误区知识点说明数据可视化中常见误区包括滥用 3D 图表截断坐标轴导致误导配色混乱信息过度堆叠图表类型选择错误图例、单位、标题缺失示例代码展示截断坐标轴的误导风险import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False companies [A公司, B公司, C公司] profits [95, 100, 105] plt.figure(figsize(8, 5)) plt.bar(companies, profits) plt.title(利润对比注意不要随意截断坐标轴) plt.xlabel(公司) plt.ylabel(利润 / 万元) # 不建议随意使用下面这种写法会放大差异 # plt.ylim(90, 110) plt.ylim(0, 120) for i, value in enumerate(profits): plt.text(i, value 2, value, hacenter) plt.tight_layout() plt.show()四、四大基础数据类型与图表选型1. 分类离散数据知识点说明分类离散数据指没有连续数值关系、通常表示类别的数据例如城市、商品、性别、品牌等。适合图表柱状图条形图饼图环形图示例代码柱状图展示城市销量import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False cities [北京, 上海, 广州, 深圳, 杭州] sales [230, 280, 190, 260, 210] plt.figure(figsize(8, 5)) plt.bar(cities, sales) plt.title(不同城市销售额对比) plt.xlabel(城市) plt.ylabel(销售额 / 万元) for i, value in enumerate(sales): plt.text(i, value 5, value, hacenter) plt.tight_layout() plt.show()效果图2. 时序数据知识点说明时序数据是带有时间维度的数据例如每日销量、月度收入、年度用户增长等。适合图表折线图面积图时序动态图多折线趋势图示例代码折线图展示月度销售趋势import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False months [1月, 2月, 3月, 4月, 5月, 6月] sales [120, 135, 160, 150, 180, 220] plt.figure(figsize(8, 5)) plt.plot(months, sales, markero) plt.title(月度销售额变化趋势) plt.xlabel(月份) plt.ylabel(销售额 / 万元) plt.grid(alpha0.3) plt.tight_layout() plt.show()效果图3. 连续数值数据知识点说明连续数值数据是可以度量、可以计算的数据例如利润、销售额、身高、温度、价格等。适合图表直方图箱线图散点图密度图示例代码直方图展示用户消费金额分布import numpy as np import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False np.random.seed(42) amounts np.random.normal(loc500, scale120, size300) plt.figure(figsize(8, 5)) plt.hist(amounts, bins20, edgecolorblack) plt.title(用户消费金额分布) plt.xlabel(消费金额 / 元) plt.ylabel(用户数量) plt.tight_layout() plt.show()效果图4. 地理空间数据知识点说明地理空间数据带有地域、经纬度、行政区划等信息例如各省销售额、城市人口密度、用户分布等。适合图表基础地图热力地图迁徙地图气泡地图示例代码Pyecharts 绘制中国地图from pyecharts.charts import Map from pyecharts import options as opts data [ (广东, 1200), (浙江, 900), (江苏, 1000), (山东, 850), (四川, 760) ] map_chart ( Map() .add(销售额, data, china) .set_global_opts( title_optsopts.TitleOpts(title各省销售额分布), visualmap_optsopts.VisualMapOpts(max_1200) ) ) map_chart.render(china_sales_map.html)效果图预留五、视觉编码规范1. 位置编码知识点说明位置编码是最直观、最准确的视觉编码方式。常见于坐标轴图表如折线图、散点图、柱状图。示例代码散点图中的位置编码import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False ad_cost [10, 20, 30, 40, 50, 60] sales [80, 110, 150, 170, 210, 250] plt.figure(figsize(8, 5)) plt.scatter(ad_cost, sales, s80) plt.title(广告投入与销售额关系) plt.xlabel(广告投入 / 万元) plt.ylabel(销售额 / 万元) plt.grid(alpha0.3) plt.tight_layout() plt.show()效果图2. 长度编码知识点说明长度编码通常用于柱状图和条形图通过柱子的长短表示数值大小。示例代码条形图展示类别对比import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False categories [线上直营渠道, 线下门店渠道, 代理商渠道, 社交电商渠道] values [300, 220, 180, 260] plt.figure(figsize(9, 5)) plt.barh(categories, values) plt.title(不同销售渠道业绩对比) plt.xlabel(销售额 / 万元) for i, value in enumerate(values): plt.text(value 5, i, value, vacenter) plt.tight_layout() plt.show()效果图3. 色彩编码知识点说明色彩可以用于区分类别也可以表示数值高低。分类数据适合使用不同颜色连续数据适合使用渐变色。示例代码热力图展示相关系数import pandas as pd import seaborn as sns import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False data pd.DataFrame({ 销售额: [100, 120, 130, 160, 180], 广告费: [20, 25, 27, 35, 40], 客流量: [300, 330, 350, 390, 420], 利润: [30, 36, 40, 55, 63] }) corr data.corr() plt.figure(figsize(7, 5)) sns.heatmap(corr, annotTrue, cmapBlues) plt.title(指标相关系数热力图) plt.tight_layout() plt.show()效果图4. 形状编码知识点说明形状编码常用于散点图中用不同 marker 区分不同类别。示例代码不同形状表示不同用户类型import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False x1, y1 [1, 2, 3], [4, 5, 6] x2, y2 [1, 2, 3], [6, 7, 8] plt.figure(figsize(8, 5)) plt.scatter(x1, y1, markero, s100, label普通用户) plt.scatter(x2, y2, marker^, s100, label会员用户) plt.title(不同用户类型散点图) plt.xlabel(访问次数) plt.ylabel(购买金额) plt.legend() plt.tight_layout() plt.show()效果图5. 文字编码知识点说明文字编码用于补充图表信息例如标题、坐标轴、图例、数据标签、重点说明等。示例代码为柱状图添加文字标签import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False names [A产品, B产品, C产品] values [120, 180, 150] plt.figure(figsize(7, 5)) plt.bar(names, values) plt.title(产品销量对比) plt.xlabel(产品) plt.ylabel(销量 / 件) for i, value in enumerate(values): plt.text(i, value 5, f{value}件, hacenter) plt.tight_layout() plt.show()效果图六、色彩设计规范1. 专业配色知识点说明专业图表通常使用低饱和度配色避免过于刺眼的颜色。常见商务图表中可以使用蓝色、灰色、绿色等稳定色系。示例代码低饱和配色柱状图import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False departments [市场部, 销售部, 研发部, 客服部] scores [85, 92, 88, 80] colors [#4C72B0, #55A868, #8172B2, #64B5CD] plt.figure(figsize(8, 5)) plt.bar(departments, scores, colorcolors) plt.title(部门绩效评分) plt.xlabel(部门) plt.ylabel(评分) plt.tight_layout() plt.show()效果图2. 色盲友好配色知识点说明不要只用红色和绿色区分数据因为红绿色盲用户可能无法准确识别。可以使用蓝色、橙色、紫色等对比更清晰的颜色。示例代码避免红绿单一区分import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False labels [完成, 未完成] values [70, 30] colors [#0072B2, #E69F00] plt.figure(figsize(6, 6)) plt.pie(values, labelslabels, autopct%1.1f%%, colorscolors, startangle90) plt.title(任务完成情况) plt.tight_layout() plt.show()效果图七、主流图表分类与适用场景1. 柱状图知识点说明柱状图适合展示多个类别之间的数值大小对比。示例代码import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False brands [品牌A, 品牌B, 品牌C, 品牌D] sales [300, 450, 280, 390] plt.figure(figsize(8, 5)) plt.bar(brands, sales) plt.title(品牌销售额对比) plt.xlabel(品牌) plt.ylabel(销售额 / 万元) plt.tight_layout() plt.show()效果图2. 条形图知识点说明当类别名称较长时条形图比柱状图更合适可以避免文字重叠。示例代码import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False items [智能家居控制系统, 企业级数据分析平台, 移动端营销工具, 客户关系管理系统] values [90, 120, 80, 110] plt.figure(figsize(9, 5)) plt.barh(items, values) plt.title(不同项目收入对比) plt.xlabel(收入 / 万元) plt.tight_layout() plt.show()效果图3. 分组柱状图知识点说明分组柱状图适合在同一类别下比较多组数据例如不同年份、不同渠道、不同地区之间的差异。示例代码import numpy as np import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False quarters [Q1, Q2, Q3, Q4] sales_2024 [120, 150, 180, 200] sales_2025 [140, 170, 190, 230] x np.arange(len(quarters)) width 0.35 plt.figure(figsize(8, 5)) plt.bar(x - width / 2, sales_2024, width, label2024年) plt.bar(x width / 2, sales_2025, width, label2025年) plt.title(不同年份季度销售额对比) plt.xlabel(季度) plt.ylabel(销售额 / 万元) plt.xticks(x, quarters) plt.legend() plt.tight_layout() plt.show()效果图4. 堆叠柱状图知识点说明堆叠柱状图可以同时展示整体总量和各部分构成。示例代码import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False months [1月, 2月, 3月, 4月] online [100, 120, 130, 150] offline [80, 90, 100, 110] plt.figure(figsize(8, 5)) plt.bar(months, online, label线上销售) plt.bar(months, offline, bottomonline, label线下销售) plt.title(线上与线下销售额堆叠图) plt.xlabel(月份) plt.ylabel(销售额 / 万元) plt.legend() plt.tight_layout() plt.show()效果图5. 折线图知识点说明折线图主要用于展示数据随时间变化的趋势。示例代码import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False days [周一, 周二, 周三, 周四, 周五, 周六, 周日] visits [1200, 1500, 1700, 1600, 2000, 2600, 2400] plt.figure(figsize(8, 5)) plt.plot(days, visits, markero) plt.title(网站一周访问量趋势) plt.xlabel(日期) plt.ylabel(访问量) plt.grid(alpha0.3) plt.tight_layout() plt.show()效果图6. 面积图知识点说明面积图是折线图的扩展可以强调数值体量变化。示例代码import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False months [1月, 2月, 3月, 4月, 5月] users [1000, 1500, 2300, 2800, 3500] plt.figure(figsize(8, 5)) plt.plot(months, users) plt.fill_between(months, users, alpha0.3) plt.title(用户数量增长面积图) plt.xlabel(月份) plt.ylabel(用户数量) plt.tight_layout() plt.show()效果图7. 饼图 / 环形图知识点说明饼图适合展示单一维度下各分类占整体的比例。分类数量不宜过多一般建议控制在 5 个以内。示例代码环形图import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False labels [服装, 数码, 食品, 家居] values [35, 25, 20, 20] plt.figure(figsize(6, 6)) plt.pie(values, labelslabels, autopct%1.1f%%, startangle90) circle plt.Circle((0, 0), 0.5, colorwhite) plt.gca().add_artist(circle) plt.title(商品类别销售占比) plt.text(0, 0, 销售占比, hacenter, vacenter, fontsize14) plt.tight_layout() plt.show()效果图8. 直方图知识点说明直方图适合展示连续数值数据的分布频率。示例代码import numpy as np import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False scores np.random.normal(75, 10, 200) plt.figure(figsize(8, 5)) plt.hist(scores, bins15, edgecolorblack) plt.title(学生成绩分布直方图) plt.xlabel(成绩) plt.ylabel(人数) plt.tight_layout() plt.show()效果图9. 箱线图知识点说明箱线图可以展示数据的中位数、上下四分位数、极值和异常值常用于异常值分析。示例代码import numpy as np import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False data [ np.random.normal(80, 8, 100), np.random.normal(75, 12, 100), np.random.normal(85, 6, 100) ] plt.figure(figsize(8, 5)) plt.boxplot(data, labels[一班, 二班, 三班]) plt.title(不同班级成绩箱线图) plt.xlabel(班级) plt.ylabel(成绩) plt.tight_layout() plt.show()效果图10. 散点图知识点说明散点图适合分析两个连续变量之间的关系例如广告投入与销售额、身高与体重等。示例代码import numpy as np import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False ad_cost np.random.randint(10, 100, 50) sales ad_cost * 3 np.random.randint(-30, 30, 50) plt.figure(figsize(8, 5)) plt.scatter(ad_cost, sales) plt.title(广告投入与销售额相关性分析) plt.xlabel(广告投入 / 万元) plt.ylabel(销售额 / 万元) plt.tight_layout() plt.show()效果图11. 热力图知识点说明热力图适合展示矩阵数据常见场景包括相关系数矩阵、用户行为密度、地区热度等。示例代码import numpy as np import seaborn as sns import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False matrix np.random.randint(1, 100, size(5, 5)) plt.figure(figsize(7, 5)) sns.heatmap(matrix, annotTrue, cmapYlGnBu) plt.title(用户行为热力图) plt.xlabel(页面模块) plt.ylabel(用户类型) plt.tight_layout() plt.show()效果图12. 雷达图知识点说明雷达图适合展示多个指标的综合评分对比例如能力模型、产品评分、企业竞争力分析等。示例代码import numpy as np import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False labels [价格, 质量, 服务, 物流, 口碑] values [80, 90, 75, 85, 88] angles np.linspace(0, 2 * np.pi, len(labels), endpointFalse) values np.concatenate((values, [values[0]])) angles np.concatenate((angles, [angles[0]])) plt.figure(figsize(6, 6)) ax plt.subplot(111, polarTrue) ax.plot(angles, values, markero) ax.fill(angles, values, alpha0.25) ax.set_thetagrids(angles[:-1] * 180 / np.pi, labels) ax.set_title(产品综合评分雷达图) plt.tight_layout() plt.show()效果图13. 词云图知识点说明词云图适合展示文本数据中高频词汇常用于评论分析、舆情分析、文章关键词提取等。示例代码from wordcloud import WordCloud import matplotlib.pyplot as plt text 数据分析 数据可视化 Python 图表 数据分析 可视化 机器学习 商业智能 数据大屏 用户画像 统计分析 wordcloud WordCloud( font_pathsimhei.ttf, width800, height400, background_colorwhite ).generate(text) plt.figure(figsize(10, 5)) plt.imshow(wordcloud) plt.axis(off) plt.title(数据分析关键词词云图) plt.show()效果图八、图表文字与标注专项知识点1. 图表标题、坐标轴与图例知识点说明完整图表通常应包含图表标题X 轴标签Y 轴标签图例单位说明示例代码import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False months [1月, 2月, 3月] online [100, 120, 150] offline [80, 90, 110] plt.figure(figsize(8, 5)) plt.plot(months, online, markero, label线上) plt.plot(months, offline, markers, label线下) plt.title(线上与线下销售趋势对比) plt.xlabel(月份) plt.ylabel(销售额 / 万元) plt.legend() plt.tight_layout() plt.show()效果图2. plt.text 静态文字标注知识点说明plt.text()可以在图表指定坐标位置添加文字说明。示例代码import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False x [1, 2, 3, 4, 5] y [10, 15, 13, 20, 18] plt.figure(figsize(8, 5)) plt.plot(x, y, markero) plt.text(4, 20, 最高点, fontsize12) plt.title(plt.text 静态文字标注示例) plt.xlabel(时间) plt.ylabel(数值) plt.tight_layout() plt.show()效果图3. 批量数值标注知识点说明批量标注常用于柱状图顶部或折线图拐点方便读者直接查看原始数值。示例代码import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False products [A, B, C, D] sales [120, 180, 150, 200] plt.figure(figsize(8, 5)) plt.bar(products, sales) for i, value in enumerate(sales): plt.text(i, value 5, str(value), hacenter) plt.title(柱状图批量数值标注) plt.xlabel(产品) plt.ylabel(销量) plt.tight_layout() plt.show()效果图4. plt.annotate 箭头注释知识点说明plt.annotate()可以添加带箭头的注释用于突出极值、异常点、关键节点。示例代码import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False months [1月, 2月, 3月, 4月, 5月] sales [100, 120, 90, 180, 160] plt.figure(figsize(8, 5)) plt.plot(months, sales, markero) plt.annotate( 促销活动后销售激增, xy(4月, 180), xytext(3月, 200), arrowpropsdict(arrowstyle-) ) plt.title(箭头注释标注关键数据) plt.xlabel(月份) plt.ylabel(销售额) plt.tight_layout() plt.show()效果图九、Python 数据可视化工具栈1. Matplotlib知识点说明Matplotlib 是 Python 最基础、最常用的静态绘图库适合绘制折线图、柱状图、饼图、散点图等基础图表。示例代码import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False x [1, 2, 3, 4] y [10, 20, 15, 25] plt.figure(figsize(7, 5)) plt.plot(x, y, markero) plt.title(Matplotlib 基础折线图) plt.xlabel(X轴) plt.ylabel(Y轴) plt.tight_layout() plt.savefig(matplotlib_line.png, dpi300) plt.show()效果图2. Seaborn知识点说明Seaborn 基于 Matplotlib提供了高级接口来绘制美观且信息丰富的统计图形。适合绘制统计图表内置美化主题代码更简洁。示例代码import seaborn as sns import matplotlib.pyplot as plt import pandas as pd # 示例数据 df pd.DataFrame({ Category: [A, B, C, D], Value: [4, 7, 1, 8] }) # 设置主题 sns.set_theme(styledarkgrid, paletteSet2) # 绘制柱状图 sns.barplot(xCategory, yValue, datadf) plt.title(Category Values) plt.show()效果图3. Plotly知识点说明Plotly 是交互式可视化库支持缩放、拖拽、悬浮提示、一键下载图片等功能适合网页可视化和数据分析报告。示例代码import plotly.express as px import pandas as pd data pd.DataFrame({ 月份: [1月, 2月, 3月, 4月, 5月], 销售额: [100, 120, 150, 130, 180] }) fig px.line( data, x月份, y销售额, markersTrue, titlePlotly 交互式折线图 ) fig.show()效果图4. Pyecharts知识点说明Pyecharts 是 ECharts 的 Python 封装适合制作地图、仪表盘、大屏可视化和交互式 HTML 图表。示例代码仪表盘from pyecharts.charts import Gauge from pyecharts import options as opts gauge ( Gauge() .add(, [(完成率, 76.5)]) .set_global_opts(title_optsopts.TitleOpts(title项目完成率仪表盘)) ) gauge.render(gauge.html)效果图5. Pandas 与 NumPy 数据预处理知识点说明在绘图之前通常需要先进行数据预处理例如读取数据、清洗缺失值、分组统计、时间转换等。示例代码import pandas as pd data pd.DataFrame({ 城市: [北京, 上海, 北京, 广州, 上海], 销售额: [100, 150, 120, 90, 180] }) result data.groupby(城市)[销售额].sum().reset_index() print(result)效果图十、图表选型方法1. 按分析目的选择图表知识点说明图表选型不能只看美观要根据分析目的选择分析目的推荐图表对比大小柱状图、条形图展示趋势折线图、面积图展示占比饼图、环形图、堆叠柱状图展示分布直方图、箱线图展示相关性散点图、热力图展示地理分布地图、热力地图展示多指标评分雷达图示例代码根据分析目的自动选择图表类型def choose_chart(purpose): chart_map { 对比: 柱状图 / 条形图, 趋势: 折线图 / 面积图, 占比: 饼图 / 环形图, 分布: 直方图 / 箱线图, 相关性: 散点图 / 热力图, 地理: 地图 / 热力地图, 多指标: 雷达图 } return chart_map.get(purpose, 请根据数据类型进一步判断) print(choose_chart(趋势)) print(choose_chart(相关性))效果图十一、数据分析到可视化的完整流程知识点说明完整的数据可视化流程通常包括明确分析目标收集数据数据清洗数据统计分析选择图表类型设计视觉编码添加标题、单位、注释导出图片或 HTML形成分析结论示例代码从数据处理到绘图完整流程import pandas as pd import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False data pd.DataFrame({ 月份: [1月, 1月, 2月, 2月, 3月, 3月], 渠道: [线上, 线下, 线上, 线下, 线上, 线下], 销售额: [100, 80, 130, 90, 160, 110] }) summary data.groupby(月份)[销售额].sum().reset_index() plt.figure(figsize(8, 5)) plt.plot(summary[月份], summary[销售额], markero) plt.title(月度总销售额趋势) plt.xlabel(月份) plt.ylabel(销售额 / 万元) for x, y in zip(summary[月份], summary[销售额]): plt.text(x, y 5, y, hacenter) plt.tight_layout() plt.savefig(sales_trend.png, dpi300) plt.show()效果图十二、可视化大屏设计知识点说明数据大屏常用于实时监控、业务展示、企业驾驶舱等场景。其特点是多图表组合、多指标联动、强调视觉冲击力和实时性。常见组成核心指标卡片趋势折线图地图分布排名柱状图环形占比图实时明细表格示例代码Pyecharts 多图表组合from pyecharts.charts import Bar, Line, Page from pyecharts import options as opts bar ( Bar() .add_xaxis([北京, 上海, 广州, 深圳]) .add_yaxis(销售额, [300, 420, 280, 390]) .set_global_opts(title_optsopts.TitleOpts(title城市销售排名)) ) line ( Line() .add_xaxis([1月, 2月, 3月, 4月]) .add_yaxis(销售额, [100, 130, 160, 200]) .set_global_opts(title_optsopts.TitleOpts(title销售趋势)) ) page Page() page.add(bar, line) page.render(dashboard.html)效果图十三、图表导出与保存知识点说明图表通常需要保存为图片或 HTML 文件方便插入论文、报告、PPT、CSDN 博客或网页中。常见导出格式PNGJPGSVGPDFHTML示例代码Matplotlib 保存高清图片import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False x [A, B, C] y [100, 150, 130] plt.figure(figsize(7, 5)) plt.bar(x, y) plt.title(高清图片导出示例) plt.xlabel(类别) plt.ylabel(数值) plt.tight_layout() plt.savefig(chart.png, dpi300, bbox_inchestight) plt.show()十四、中文乱码与负号异常解决知识点说明使用 Matplotlib 绘制中文图表时常见问题包括中文显示为方框负号无法正常显示保存图片后中文乱码解决方法是设置中文字体和负号显示参数。示例代码plt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False十五、交互式悬浮提示知识点说明交互式图表可以在鼠标悬浮时展示详细数据适合数据分析报告和网页展示。示例代码Plotly 悬浮提示import plotly.express as px import pandas as pd data pd.DataFrame({ 城市: [北京, 上海, 广州, 深圳], 销售额: [300, 420, 280, 390], 利润: [80, 120, 70, 100] }) fig px.scatter( data, x销售额, y利润, text城市, size销售额, hover_data[城市, 销售额, 利润], title城市销售额与利润交互式散点图 ) fig.show()效果图十六、总结数据可视化不是简单地“把数据画出来”而是一个从数据理解、图表选择、视觉编码、配色设计、文字标注到结果表达的完整过程。本文总结了以下核心内容数据可视化的定义与价值数据可视化设计原则四大基础数据类型视觉编码规范色彩设计规范主流图表分类与适用场景图表文字与标注方法Matplotlib、Seaborn、Plotly、Pyecharts 工具栈数据预处理方法图表选型方法数据大屏设计图表导出与保存中文乱码问题解决交互式图表设计掌握这些知识后就可以根据不同业务场景选择合适的图表并使用 Python 快速完成专业的数据可视化分析。附常用库安装命令pip install matplotlib seaborn pandas numpy plotly pyecharts wordcloud附推荐学习路线先掌握 Matplotlib 基础绘图再学习 Seaborn 统计图表学习 Pandas 数据清洗与分组统计学习 Plotly 交互式图表学习 Pyecharts 地图与大屏最后结合真实数据完成综合项目