ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Python条形图实战:从Matplotlib到Seaborn的数据可视化指南

Python条形图实战:从Matplotlib到Seaborn的数据可视化指南 1. 项目概述为什么条形图是数据可视化的“定海神针”如果你刚开始接触Python数据分析或者已经用Pandas处理了一堆数据却不知道怎么直观地展示出来那么条形图Bar Chart绝对是你第一个需要熟练掌握的“武器”。它看起来简单不就是一根根柱子吗但在实际工作中无论是向老板汇报月度销售对比、分析不同产品类别的用户偏好还是快速洞察一组分类数据的分布条形图都是最直接、最不容易出错的选择。我见过太多新手一上来就想搞复杂的桑基图或热力图结果不仅把自己绕晕听众也看得云里雾里。条形图的核心价值在于其极强的可读性和对比性——人的眼睛天生就擅长比较长度。在Python的生态里用几行代码就能从枯燥的表格中变出清晰直观的条形图这个从数据到洞察的“最后一公里”是每个数据从业者的基本功。这次我们不谈空泛的理论直接上手实战。我会以一个模拟的电商销售数据为例带你走完从数据准备、基础绘图到高级定制和美化的完整流程。你会看到即使是最基础的matplotlib也能通过一些技巧画出媲美商业软件的图表。同时我们也会用到更现代的seaborn库来提升效率并探讨在什么场景下选择什么样的条形图变体。无论你是想快速生成一份报告还是为复杂的数据仪表盘准备组件这篇内容都能给你提供可直接复用的代码和经过踩坑验证的经验。2. 环境准备与数据构造打造你的可视化工作台在动手画图之前一个稳定、高效的环境至关重要。很多人卡在第一步不是因为代码难而是因为库没装对或者环境混乱。2.1 核心库的选择与安装Python数据可视化的库很多但针对条形图我们聚焦两个核心Matplotlib 这是基石是Python可视化的“标准答案”。它提供了最大程度的灵活性几乎可以定制图表的每一个像素。但正因为强大其默认样式比较“学术化”需要手动调整才能美观。Seaborn 它建立在Matplotlib之上相当于一个高级“皮肤”和“语法糖”库。Seaborn的默认样式更现代美观并且提供了许多高级统计图表和便捷函数能极大简化常见图表的绘制过程。我的建议是两者结合使用用Seaborn快速出图、设置主题再用Matplotlib的接口进行精细调整。安装非常简单如果你使用pip打开终端或命令提示符一行命令搞定pip install matplotlib seaborn pandas numpy这里也加上了pandas和numpy因为数据处理是可视化的前提。如果你用的是Anaconda发行版这些库通常已经预装好了。注意 如果你在安装过程中遇到速度慢或超时的问题可以临时使用国内的镜像源例如清华源pip install matplotlib seaborn pandas numpy -i https://pypi.tuna.tsinghua.edu.cn/simple。但这只是安装时的网络优化与后续代码无关。2.2 构造一份有意义的模拟数据学习阶段我们不必寻找复杂的外部数据。用Pandas自己构造一份模拟的电商月度销售数据既能理解数据结构又能完全控制数据内容方便演示各种效果。import pandas as pd import numpy as np # 设置随机种子确保每次运行生成的数据一致 np.random.seed(2023) # 构造数据 data { ‘月份’: [‘1月’, ‘2月’, ‘3月’, ‘4月’, ‘5月’, ‘6月’], ‘产品A销售额’: np.random.randint(50, 200, 6), ‘产品B销售额’: np.random.randint(30, 180, 6), ‘产品C销售额’: np.random.randint(80, 250, 6), ‘客户数’: np.random.randint(100, 500, 6) } df pd.DataFrame(data) # 计算总销售额作为一个新的列 df[‘总销售额’] df[[‘产品A销售额‘, ’产品B销售额‘, ’产品C销售额‘]].sum(axis1) print(“构造的销售数据框“) print(df) print(“\n数据框信息“) print(df.info())运行这段代码你会得到一个包含6个月份、各产品销售额、客户数及总销售额的DataFrame。这样的数据结构行是类别/时间列是数值正是绘制条形图的典型输入。理解你的数据框结构是选择正确绘图API的第一步。3. 从零到一用Matplotlib绘制基础条形图让我们先从最原始的Matplotlib开始理解条形图的基本构成元素。虽然代码稍多但这是掌握自定义能力的必经之路。3.1 单系列垂直条形图假设我们首先只想看上半年“总销售额”随月份的变化。这是一个单系列、分类轴月份为字符串的数据最适合用基本的plt.bar()。import matplotlib.pyplot as plt # 设置中文字体防止标签显示为方框根据系统调整路径 plt.rcParams[‘font.sans-serif’] [‘SimHei‘] # 用来正常显示中文标签 plt.rcParams[‘axes.unicode_minus’] False # 用来正常显示负号 # 准备数据 categories df[‘月份’] values df[‘总销售额’] # 创建图形和坐标轴 fig, ax plt.subplots(figsize(10, 6)) # figsize控制图形宽高 # 绘制条形图 # 第一个参数是条形的x轴位置这里用类别索引第二个参数是条形高度值 bars ax.bar(categories, values) # 添加标题和标签 ax.set_title(‘2023年上半年总销售额趋势‘, fontsize16, pad20) # pad是标题与图的距离 ax.set_xlabel(‘月份‘, fontsize12) ax.set_ylabel(‘销售额 (万元)‘, fontsize12) # 在条形顶部添加数据标签 for bar in bars: height bar.get_height() # 在条形上方居中位置添加文本格式化为整数 ax.text(bar.get_x() bar.get_width() / 2, height, f‘{int(height)}‘, ha‘center‘, va‘bottom‘, fontsize10) # 自动调整布局防止标签被截断 plt.tight_layout() # 显示图形 plt.show()这段代码已经生成了一个完整的条形图。但你可能立刻会发现几个问题柱子颜色是默认的蓝色系不够美观网格线太密Y轴刻度可能不是整数。别急这正是我们需要逐步优化的地方。这个基础图表包含了所有核心组件图形Figure、坐标轴Axes、条形BarContainer、标题Title、轴标签Label和数据标签Text。3.2 多系列分组条形图现实中我们更常需要比较多个系列在同一分类下的值比如比较产品A、B、C每个月的销售额。这就需要绘制分组条形图。关键点在于手动计算每个组内每个条形的位置。# 准备多系列数据 product_a df[‘产品A销售额’] product_b df[‘产品B销售额’] product_c df[‘产品C销售额’] x np.arange(len(categories)) # 月份的位置索引 [0, 1, 2, 3, 4, 5] width 0.25 # 每个条形的宽度 fig, ax plt.subplots(figsize(12, 7)) # 绘制三组条形每组条形的位置依次偏移一个宽度 rects1 ax.bar(x - width, product_a, width, label‘产品A‘, color‘#2E86AB‘) rects2 ax.bar(x, product_b, width, label‘产品B‘, color‘#A23B72‘) rects3 ax.bar(x width, product_c, width, label‘产品C‘, color‘#F18F01‘) # 设置x轴刻度标签为月份名称 ax.set_xticks(x) ax.set_xticklabels(categories) ax.set_ylabel(‘销售额 (万元)‘) ax.set_title(‘各产品分月销售额对比‘) ax.legend() # 显示图例 # 为每个条形添加数据标签通用函数 def autolabel(rects): “”“在条形上方附加数值标签。”“” for rect in rects: height rect.get_height() ax.annotate(f‘{height}‘, xy(rect.get_x() rect.get_width() / 2, height), xytext(0, 3), # 3 points vertical offset textcoords“offset points“, ha‘center‘, va‘bottom‘, fontsize9) autolabel(rects1) autolabel(rects2) autolabel(rects3) plt.tight_layout() plt.show()这里引入了几个新概念np.arange用于生成条形组的中心位置width控制条形宽度和组内间距通过x - width,x,x width实现分组并列使用ax.annotate进行更灵活的标签标注。分组条形图能清晰展示组内对比不同产品在同一月份的高低和组间趋势同一产品在不同月份的变化。3.3 条形图的“变体”堆叠条形图与水平条形图根据分析目标我们可以改变条形的排列方式。堆叠条形图适合展示部分与整体的关系比如每月总销售额由各产品销售额堆叠而成。fig, ax plt.subplots(figsize(10, 6)) # 使用bottom参数实现堆叠 ax.bar(categories, product_a, label‘产品A‘, color‘#2E86AB‘) ax.bar(categories, product_b, bottomproduct_a, label‘产品B‘, color‘#A23B72‘) # 产品C堆叠在AB之上 ax.bar(categories, product_c, bottomproduct_a product_b, label‘产品C‘, color‘#F18F01‘) ax.set_ylabel(‘销售额 (万元)‘) ax.set_title(‘各产品销售额堆叠图展示构成‘) ax.legend() plt.tight_layout() plt.show()水平条形图在类别名称较长、或需要强调排名时特别有用只需将bar替换为barh并注意x轴和y轴的含义对调。# 按总销售额排序以便在水平条形图中降序显示 df_sorted df.sort_values(by‘总销售额‘) fig, ax plt.subplots(figsize(9, 5)) ax.barh(df_sorted[‘月份’], df_sorted[‘总销售额’], color‘skyblue‘) ax.set_xlabel(‘总销售额 (万元)‘) ax.set_title(‘月度总销售额排名水平条形图‘) plt.tight_layout() plt.show()4. 进阶美化与实战技巧让你的图表会说话默认生成的图表仅仅“能用”离“好看”和“专业”还有很大距离。以下美化技巧能极大提升图表的表达力和专业性。4.1 全局样式设置与颜色搭配Matplotlib的默认样式“plt.style.use(‘default’)”比较朴素。我们可以使用内置样式或自定义全局参数。# 使用Seaborn的样式即使不调用seaborn绘图函数也可以只用它的样式 import seaborn as sns sns.set_style(“whitegrid“) # 设置背景为白色带网格 # 其他可选样式”darkgrid“, “white“, “dark“, “ticks“ sns.set_palette(“husl“) # 设置颜色主题 sns.set_context(“notebook“, font_scale1.2) # 设置上下文和字体缩放 # 或者直接使用Matplotlib的样式 plt.style.use(‘seaborn-v0_8-whitegrid‘) # Matplotlib 3.6 推荐写法 # 经典样式’ggplot‘, ’seaborn‘, ’fivethirtyeight‘颜色是可视化中最直观的元素。避免使用默认的颜色循环尤其是多系列时。可以使用Matplotlib的色表colormap或手动指定一组和谐的颜色。# 方法1使用色表 (cmap) colors plt.cm.Set3(np.linspace(0, 1, len(categories))) # 从Set3色表中取色 # 方法2手动指定一组颜色推荐更可控 custom_colors [‘#4C72B0‘, ‘#55A868‘, ‘#C44E52‘, ‘#8172B2‘, ‘#CCB974‘, ‘#64B5CD‘]实操心得 对于分类数据如不同月份、不同产品使用定性色表Qualitative colormap如Set3,Set2,tab20c这些色表颜色差异明显易于区分。对于顺序数据如数值大小使用顺序色表Sequential colormap如viridis,plasma,summer通过颜色深浅表达大小。4.2 添加辅助元素与注释清晰的图表离不开辅助线、注释和高亮。fig, ax plt.subplots(figsize(10, 6)) bars ax.bar(categories, df[‘总销售额’], colorcustom_colors, edgecolor‘black‘, linewidth1.2) # 1. 添加平均值参考线 mean_value df[‘总销售额’].mean() ax.axhline(ymean_value, color‘red‘, linestyle‘--‘, linewidth2, alpha0.7, labelf‘平均值: {mean_value:.1f}‘) # 2. 高亮最大值 max_idx df[‘总销售额’].idxmax() max_bar bars[max_idx] max_bar.set_edgecolor(‘gold‘) max_bar.set_linewidth(3) # 在最大值条形上添加特殊注释 ax.annotate(‘最高‘, xy(max_bar.get_x() max_bar.get_width()/2, max_bar.get_height()), xytext(0, 10), textcoords‘offset points‘, ha‘center‘, color‘darkred‘, fontweight‘bold‘) # 3. 添加数据标签改进版带背景框 for bar in bars: height bar.get_height() ax.text(bar.get_x() bar.get_width()/2, height 5, # 位置微调 f‘{int(height)}‘, ha‘center‘, va‘bottom‘, fontsize11, bboxdict(boxstyle‘round,pad0.3‘, facecolor‘wheat‘, alpha0.7, edgecolor‘none‘)) ax.set_title(‘上半年总销售额含平均值线与高亮‘, fontsize14, fontweight‘bold‘) ax.set_xlabel(‘月份‘, fontsize12) ax.set_ylabel(‘销售额 (万元)‘, fontsize12) ax.legend() ax.grid(axis‘y‘, linestyle‘-‘, alpha0.4) # 只显示水平网格线 plt.tight_layout() plt.show()这段代码演示了如何让图表“讲故事”红线告诉读者平均水平在哪里高亮的柱子立刻抓住眼球带背景框的数据标签清晰易读。这些细节的叠加让图表从“数据展示”升级为“数据分析”。4.3 坐标轴与刻度优化默认的刻度格式可能不符合业务习惯比如销售额需要千位分隔符。from matplotlib.ticker import FuncFormatter fig, ax plt.subplots(figsize(10, 6)) ax.bar(categories, df[‘总销售额’]*10000) # 假设原数据单位是万这里乘以10000展示元 # 自定义Y轴刻度格式函数 def yuan_formatter(x, pos): ‘将数字格式化为带千位分隔符的货币形式‘ return f‘{x:,.0f} 元‘ # 应用格式化器 ax.yaxis.set_major_formatter(FuncFormatter(yuan_formatter)) # 旋转X轴标签防止重叠 plt.setp(ax.get_xticklabels(), rotation45, ha‘right‘) # 设置Y轴范围从0开始并留出顶部空间给标签 ax.set_ylim(0, df[‘总销售额’].max() * 10000 * 1.15) ax.set_title(‘销售额详细展示自定义格式‘) plt.tight_layout() plt.show()此外对于分类很多的条形图比如城市排名可以考虑只显示前N名或者将剩余类别合并为“其他”以避免图表过于拥挤。5. 拥抱Seaborn用更简洁的语法绘制统计条形图Seaborn的barplot和countplot函数在绘制条形图时不仅语法更简洁还自动附带了统计估计默认是均值和误差棒表示置信区间这在统计分析中非常有用。5.1 使用barplot展示分布与关系假设我们想查看不同月份“客户数”的分布情况。# 重置为seaborn默认样式 sns.set_theme(style“whitegrid“) plt.figure(figsize(10, 6)) # 使用barplotx是分类y是数值。estimator默认为mean这里我们用sum来看总和。 ax sns.barplot(datadf, x‘月份‘, y‘客户数‘, estimator‘sum‘, errorbarNone, palette“Blues_d“, saturation0.8) # errorbarNone 表示不显示误差棒因为我们用的是总和不是样本估计。 ax.set_title(‘各月客户总数‘, fontsize15) ax.set_xlabel(‘月份‘) ax.set_ylabel(‘客户总数‘) # Seaborn绘制的条形图可以通过patches对象访问并添加自定义标签 for container in ax.containers: ax.bar_label(container, fmt‘%.0f‘, padding3, fontsize10) # fmt控制格式padding是距离 plt.tight_layout() plt.show()barplot的强大之处在于它可以轻松进行分组和分面。例如如果我们有一份包含“月份”、“产品线”、“销售额”的详细交易数据我们可以用一行代码画出按产品线分组的月度销售额。# 假设我们有一个长格式的数据框 df_long # 它可能包含列月份 产品线 销售额 # sns.barplot(datadf_long, x‘月份‘, y‘销售额‘, hue‘产品线‘) # hue参数自动分组5.2 使用countplot进行计数统计countplot是barplot的一个特例它自动对分类变量进行计数无需指定y值。这在分析数据集中各类别的样本数量时极其方便。# 假设我们有一个用户数据集其中有一列‘注册渠道‘ # sns.countplot(datauser_df, x‘注册渠道‘, orderuser_df[‘注册渠道‘].value_counts().index) # order参数可以按频次排序注意事项 Seaborn的误差棒error bar默认展示的是95%的置信区间它反映的是对均值估计的不确定性基于样本的Bootstrapping。这在你进行组间比较时非常重要——如果两个条形的误差棒重叠严重可能意味着它们的均值在统计上没有显著差异。但如果你只是展示汇总值如总和、最大值务必设置errorbarNone。6. 综合案例制作一份专业的销售分析仪表板图表现在我们将所有技巧融合创建一个包含多个子图、高度定制化的销售分析仪表板视图。# 1. 创建画布和子图布局 fig plt.figure(figsize(16, 10)) # 创建2x2的子图网格 ax1 plt.subplot(2, 2, 1) # 左上总销售额趋势基础条形 ax2 plt.subplot(2, 2, 2) # 右上产品销售额堆叠堆叠条形 ax3 plt.subplot(2, 2, 3) # 左下各产品分月对比分组条形 ax4 plt.subplot(2, 2, 4) # 右下销售额 vs 客户数 散点图关联分析非条形图用于展示组合 # 使用统一的颜色主题 main_color ‘#2E86AB‘ highlight_color ‘#E63946‘ product_colors [‘#2E86AB‘, ‘#A23B72‘, ‘#F18F01‘] # 2. 子图1总销售额趋势图带高亮和趋势线 bars1 ax1.bar(df[‘月份’], df[‘总销售额’], colormain_color, alpha0.8, edgecolor‘white‘) # 高亮最大值 max_bar_idx df[‘总销售额’].idxmax() bars1[max_bar_idx].set_color(highlight_color) bars1[max_bar_idx].set_linewidth(3) # 添加趋势线简单线性 z np.polyfit(range(len(df)), df[‘总销售额’], 1) p np.poly1d(z) ax1.plot(df[‘月份’], p(range(len(df))), color‘gray‘, linestyle‘--‘, label‘趋势线‘) ax1.set_title(‘(a) 总销售额月度趋势‘, fontsize13, loc‘left‘) ax1.set_ylabel(‘销售额 (万元)‘) ax1.legend() ax1.grid(axis‘y‘, alpha0.3) # 添加数据标签 for bar in bars1: ax1.text(bar.get_x() bar.get_width()/2, bar.get_height()5, f‘{int(bar.get_height())}‘, ha‘center‘, va‘bottom‘, fontsize9) # 3. 子图2产品销售额堆叠图 bottom_val np.zeros(len(df)) for idx, col in enumerate([‘产品A销售额‘, ’产品B销售额‘, ’产品C销售额‘]): ax2.bar(df[‘月份’], df[col], bottombottom_val, labelcol[:-3], colorproduct_colors[idx], alpha0.9) bottom_val df[col].values ax2.set_title(‘(b) 产品销售额构成堆叠‘, fontsize13, loc‘left‘) ax2.set_ylabel(‘销售额 (万元)‘) ax2.legend(title‘产品‘) ax2.grid(axis‘y‘, alpha0.3) # 4. 子图3产品分月对比分组条形图 x np.arange(len(df)) width 0.25 for i, (col, color) in enumerate(zip([‘产品A销售额‘, ’产品B销售额‘, ’产品C销售额‘], product_colors)): offset (i - 1) * width # 使产品B在中间 ax3.bar(x offset, df[col], width, labelcol[:-3], colorcolor, alpha0.9) ax3.set_xticks(x) ax3.set_xticklabels(df[‘月份’]) ax3.set_title(‘(c) 各产品月度销售额对比‘, fontsize13, loc‘left‘) ax3.set_ylabel(‘销售额 (万元)‘) ax3.legend(title‘产品‘) ax3.grid(axis‘y‘, alpha0.3) # 5. 子图4销售额与客户数关联散点图丰富仪表板信息 scatter ax4.scatter(df[‘总销售额’], df[‘客户数’], sdf[‘总销售额’]/5, # 点大小与销售额成正比 cdf.index, cmap‘viridis‘, alpha0.7, edgecolors‘k‘, linewidth0.5) # 添加趋势线 z2 np.polyfit(df[‘总销售额’], df[‘客户数’], 1) p2 np.poly1d(z2) ax4.plot(df[‘总销售额’], p2(df[‘总销售额’]), color‘red‘, alpha0.5, label‘线性拟合‘) # 为每个点添加月份标签 for i, txt in enumerate(df[‘月份’]): ax4.annotate(txt, (df[‘总销售额’].iloc[i], df[‘客户数’].iloc[i]), xytext(5, 5), textcoords‘offset points‘, fontsize9) ax4.set_title(‘(d) 总销售额与客户数关联分析‘, fontsize13, loc‘left‘) ax4.set_xlabel(‘总销售额 (万元)‘) ax4.set_ylabel(‘客户数‘) ax4.legend() ax4.grid(True, alpha0.3) # 6. 全局调整 plt.suptitle(‘2023年上半年销售数据分析仪表板‘, fontsize18, fontweight‘bold‘, y1.02) plt.tight_layout() plt.show()这个综合案例展示了如何将多个条形图及其变体组织在一起形成一个有逻辑、多视角的分析视图。每个子图都有明确的定位趋势、构成、对比、关联并运用了颜色高亮、趋势线、数据标签、图例、网格等元素使整个仪表板既专业又信息丰富。7. 常见问题与排查技巧实录在实际操作中你一定会遇到各种奇怪的问题。下面是我总结的一些高频“坑点”和解决方案。7.1 中文显示为方框或乱码这是Matplotlib在非英文环境下最常见的问题。根本原因 Matplotlib默认字体不包含中文字形。解决方案临时设置推荐用于脚本 在代码开头添加以下两行。plt.rcParams[‘font.sans-serif’] [‘SimHei‘, ‘Microsoft YaHei‘, ‘DejaVu Sans‘] # 指定中文字体备选 plt.rcParams[‘axes.unicode_minus’] False # 解决负号显示问题永久设置 修改Matplotlib的配置文件matplotlibrc。可以通过print(matplotlib.matplotlib_fname())找到该文件路径然后修改font.sans-serif和axes.unicode_minus项。指定具体字体文件 如果你有特定的字体文件.ttf可以将其路径加入字体管理器。import matplotlib.font_manager as fm font_path ‘/path/to/your/font.ttf‘ font_prop fm.FontProperties(fnamefont_path) # 然后在绘图时指定fontpropertiesfont_prop ax.set_title(‘标题‘, fontpropertiesfont_prop)7.2 条形图标签重叠或显示不全X轴标签过长或过多旋转标签plt.xticks(rotation45, ha‘right‘)。ha‘right‘让旋转后的标签右对齐通常更美观。换行显示 对于长标签可以手动插入换行符\n。只显示部分标签ax.set_xticks(x[::2])和ax.set_xticklabels(labels[::2])可以间隔显示。图形布局被裁剪 总是在plt.show()前调用plt.tight_layout()它能自动调整子图参数使标签和标题不被裁剪。对于复杂布局可以指定tight_layout(pad, w_pad, h_pad)参数调整间距。Y轴上限太低导致条形顶部的数据标签被截断 手动设置Y轴范围留出裕量。ax.set_ylim(0, max(value) * 1.15) # 留出15%的空间7.3 颜色与样式不统一或不符合预期Seaborn和Matplotlib样式冲突 如果在同一个脚本中混用注意设置顺序。通常先调用sns.set_theme()设置全局样式然后再用Matplotlib的精细调整。Matplotlib的plt.style.use()会覆盖Seaborn的部分设置。自定义颜色失效 确保你传递的颜色列表长度与数据条数一致。对于分组条形图给color参数传递一个颜色列表它会循环使用。条形边框edgecolor太粗或太细 通过edgecolor和linewidth参数控制。edgecolor‘none‘可以取消边框。7.4 性能问题绘制大量条形时卡顿当需要绘制成百上千个条形时例如在时间序列上的高频数据传统的条形图会变得非常慢。考虑替代方案 对于超多类别的分类数据考虑使用水平条形图并只显示Top N或者使用直方图Histogram或密度图KDE来展示分布而不是为每个类别画一个条形。使用更高效的绘图后端 如Agg非交互式适合保存文件。import matplotlib matplotlib.use(‘Agg‘) # 必须在导入pyplot之前设置 import matplotlib.pyplot as plt简化图形元素 关闭抗锯齿antialiasedFalse减少网格线密度不使用阴影等复杂效果。7.5 保存的图片分辨率低或格式不对保存时指定DPIplt.savefig(‘output.png‘, dpi300, bbox_inches‘tight‘)。dpi每英寸点数决定分辨率bbox_inches‘tight‘确保保存时去除多余白边。选择正确的格式.png 无损支持透明适用于网络和文档。.svg 矢量格式无限放大不失真适用于印刷和高质量演示。.jpg 有损压缩文件小适用于照片类不适合线条图表会有噪点。注意透明背景 如果需要在非白色背景上使用保存时设置transparentTrue。画好一个条形图就像完成一道菜。食材数据是基础步骤代码是方法但火候和调味美化与细节决定了最终的品质。从最基础的plt.bar()开始理解每个参数的含义然后逐步引入Seaborn提升效率最后通过综合案例融会贯通。记住最好的学习方式不是复制代码而是理解每一行代码为什么要这么写然后用自己的数据去尝试、去调整、去犯错。当你能够不假思索地根据分析目标选择合适的条形图变体并把它画得清晰美观时你就真正掌握了这个数据可视化的核心工具。
返回列表