版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章对比与趋势可视化章节导读大数据可视化技术作为处理和分析大规模数据集的重要工具,旨在洞察数据背后的深层含义和趋势,服务于社会经济的高质量发展。通过科学严谨的数据分析与直观生动的可视化展现,用户能更清晰地把握时间序列特征、空间分布规律以及各维度数据的动态变化。本章着重介绍对比与趋势分析这一核心领域,通过柱形图、折线图等典型表现形式,阐述如何借助可视化手段揭示数据间的关系结构和演变规律,并使用Python带领读者进入实操。本章内容概览柱形图了解及掌握数据对比与分类展示折线图了解及掌握趋势分析与时间序列表现箱线图了解及掌握数据分布与异常值识别词云图了解及掌握文本数据可视化与关键词突出每个小节均包含概念讲解、参数说明和完整Python代码示例,帮助读者从理论到实践全面掌握。3.1柱形图什么是柱形图?柱形图将不同数据表示为长短不一的矩形(柱形),并按一定顺序排列。它是统计分析中最常用的图形,一般用于表示一段时间内的数据变化以及各项之间的比较情况。数值映射数值大小体现为柱形高度——柱形越高,数值越大美观要点柱形宽度应大于间距,否则受众注意力会集中在空白处而忽略数据核心优势让人一眼看出各数据大小,直观比较数据之间的差距matplotlib.pyplot.bar()方法使用matplotlib.pyplot.bar(x,height,alpha,width,color,label)方法绘制柱形图,返回一个BarContainer对象,包含所有柱形。参数说明xx轴位置序列,一般用arange()产生,说明各柱形在x轴的位置heighty轴数值序列,表示每个柱形的高度alpha透明度width柱形宽度,默认值为0.8color柱的填充颜色label柱形图的图例标签3.1.1单柱图单柱图:最简实现单柱图只有一组柱的统计图,每根柱表达一个时间区间或一个类别。以广州四季平均气温(春23°C、夏34°C、秋26°C、冬17°C)为例,仅需5行代码即可绘制。importmatplotlib.pyplotaspltnum_list=[23,34,26,17]x=range(len(num_list))plt.bar(x=x,height=num_list)plt.show()此时柱形图尚未直观表达数据含义——x轴缺少刻度标签,无法明确每个柱形对应的分类。广州四季气温数据上图直观展示了广州四季平均气温,夏季最高达34°C,冬季最低为17°C。接下来我们将逐步完善这张图表。设置x轴刻度标签使用matplotlib.pyplot.xticks(ticks,labels,**kwargs)方法设置x轴刻度标签,返回(locs,labels)。参数说明ticks指定刻度位置,传入位置列表。如[0,1,2]表示在0、1、2位置显示刻度labels指定刻度标签,传入标签列表。如['春','夏','秋','冬']**kwargs控制标签外观的其他参数如果标签是中文,需指定字体以避免乱码:plt.rcParams['font.sans-serif']=['SimHei']以及plt.rcParams['axes.unicode_minus']=Falseplt.ylim()与plt.xlim()方法详解通过plt.ylim()和plt.xlim()方法可以手动设置坐标轴的取值范围,从而放大或缩小数据的视觉差异。plt.ylim(ymin,ymax)设置y轴的显示范围示例:plt.ylim(15,40)将y轴范围限定在15到40之间适用场景:数据值均高于某个基准值时,避免大量空白plt.xlim(xmin,xmax)设置x轴的显示范围示例:plt.xlim(-0.5,3.5)在两侧留出适当边距适用场景:需要聚焦某段时间区间的数据注意:修改坐标轴范围会影响数据的视觉呈现,需确保不误导读者对数据大小的判断。坐标轴标签与图表标题设置为柱形图添加坐标轴标签和图表标题,使图表含义更加完整清晰。参数说明plt.xlabel("季节")设置x轴标签,传入标签字符串plt.ylabel("平均温度")设置y轴标签,传入标签字符串plt.title("平均气温")设置图表标题,显示在图表上方plt.legend()显示图例说明,需配合bar()中的label参数使用plt.xlabel("季节")#设置x轴标签plt.ylabel("平均温度")#设置y轴标签plt.title("平均气温")#设置图表标题plt.legend()#显示图例图例说明(legend)用于表达图片中颜色或形状的含义,通常出现在图片的下方或上方。需先在plt.bar()中设置label参数,再调用plt.legend()才能正常显示。在柱形上显示数值:原理详解为使图表含义更清晰,可在柱形上方显示对应数值。需使用BarContainer对象遍历所有柱形并添加文字。01保存BarContainer对象调用plt.bar()时将返回值赋给变量rects,用于后续遍历02遍历所有柱形使用forrectinrects循环访问每一根柱形03计算文字x坐标x_pos=rect.get_x()+rect.get_width()/2,即柱形中心位置04获取柱形高度height=rect.get_height(),即柱形对应的数值05调用plt.text()添加文字plt.text(x_pos,height+1,str(height),ha="center"),在柱顶上方居中显示数值rects=plt.bar(x=x,height=num_list,label="广州")forrectinrects:x_pos=rect.get_x()+rect.get_width()/2#文字x坐标height=rect.get_height()#文字y坐标plt.text(x_pos,height+1,str(height),ha="center")添加刻度标签代码xlabel_list=['春','夏','秋','冬']#添加x轴刻度标签plt.xticks(x,xlabel_list)添加标签后,每个柱形对应的季节一目了然。但由于广州四季平均温度均高于15°C,y轴从0开始时四季温差并不明显。解决方案通过plt.ylim(15,40)将y轴取值范围设置为15~40,放大温差视觉效果。同理,x轴范围可用plt.xlim()设置。💡设计提示合理调整坐标轴范围能让数据差异更加突出,但需注意不要误导读者。设置坐标轴范围与标签在添加刻度标签后,进一步完善坐标轴的显示范围与标签说明。设置y轴范围广州四季平均温度均高于15°C,若y轴从默认的0开始,四季温差并不明显。代码:plt.ylim(15,40)将y轴取值范围设置为15~40,放大温差视觉效果。同理,设置x轴范围:plt.xlim(xmin,xmax)设置坐标轴标签为x轴和y轴分别添加说明性标签,使图表含义更完整。plt.xlabel("季节")#设置x轴标签plt.ylabel("平均温度")#设置y轴标签plt.ylim(15,40)#设置y轴取值范围合理设置坐标轴范围是柱形图设计的重要技巧——既要放大数据差异,又不能截断数据或误导读者。完善图表元素显示数值显示图例添加标题设置坐标轴通过plt.xlabel()、plt.ylabel()设置坐标轴标签,plt.title()添加标题,plt.legend()显示图例,逐步构建完整的单柱图。图例说明的设置方法图例说明用于表达图片中颜色或形状的含义,通常出现在图片的下方或上方。在plt.bar()中添加label参数rects=plt.bar(x=x,height=num_list,label="广州")label参数指定该数据系列在图例中显示的名称调用plt.legend()显示图例设置label后,必须调用plt.legend()才能将图例渲染到图表中若只设置label而不调用plt.legend(),图例不会显示调用plt.title()添加图表标题plt.title("平均气温")在图表上方显示标题文字#在bar()中设置labelrects=plt.bar(x=x,height=num_list,label="广州")#调用legend()显示图例plt.legend()#添加图表标题plt.title("平均气温")完成以上步骤后,一张包含坐标轴标签、图例说明和标题的完整单柱图就绘制完成了(对应图3-3效果)。在柱形上显示数值为使图表含义更清晰,可在柱形上方显示对应数值。需使用BarContainer对象遍历所有柱形并添加文字。rects=plt.bar(x=x,height=num_list,label="广州")forrectinrects:x_pos=rect.get_x()+rect.get_width()/2#文字x坐标height=rect.get_height()#文字y坐标plt.text(x_pos,height+1,str(height),ha="center")x坐标柱形x坐标+柱宽的一半y坐标柱形高度或略高于柱形高度对齐方式ha="center"居中对齐单柱图完整代码importmatplotlib.pyplotaspltplt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=Falsenum_list=[23,34,26,17]xlabel_list=['春','夏','秋','冬']x=range(len(num_list))rects=plt.bar(x=x,height=num_list,label="Guangzhou")forrectinrects:x_pos=rect.get_x()+rect.get_width()/2height=rect.get_height()plt.text(x_pos,height+1,str(height),ha="center")plt.xticks(x,xlabel_list)plt.xlabel("季节")plt.ylabel("平均温度")plt.ylim(15,40)plt.legend()plt.title("平均气温")plt.show()单柱图绘制流程回顾01准备数据定义数据列表与x轴标签列表02绘制基础柱形调用plt.bar()绑定数据03设置标签与范围xticks、xlabel、ylabel、ylim04添加文字与图例遍历柱形添加数值,显示标题与图例柱形图美观性设计原则绘制柱形图时,除了数据准确,视觉美观同样重要。以下是提升柱形图可读性的关键设计原则。柱宽与间距柱形宽度应大于相邻柱形间的距离,否则受众注意力会集中在空白处而忽略数据颜色选择同一数据系列使用统一颜色,不同系列使用对比色(如蓝色与橙色),避免使用过多颜色数据标签在柱形上方显示数值,让读者无需对照坐标轴即可获取精确数据坐标轴范围合理设置ylim,放大数据差异,但不应截断数据或误导读者柱形图的核心优势在于让人一眼看出各数据的大小,直观比较数据之间的差距。设计时应以"清晰传达信息"为首要目标。3.1.2簇状柱形图簇状柱形图概述柱形图可衍生出多种形式,由多个并列分类组成的柱形图称为簇状柱形图。它分为两种类型:组间柱形图又称双维度柱形图,适合分析有层级关系的数据组内柱形图矩形按对比维度字段分割,用不同颜色表示对比维度间的关系,适合分析对比组内各项数据绘制簇状柱形图时,数据分组数不宜过多,每组分类项最好不多于4项。当需要重点突出对比项的整体情况时,建议使用堆积图。示例:年销售量统计以2024年各季度销售量(15、20、18、25万件)为例,先绘制单组柱形图。x轴显示四个季度,y轴显示销售量,图表标题为"销售量统计",柱形上方显示数据。2024年第四季度销售量最高,达25万件,呈现逐步增长趋势。年销售量统计图代码解析以2024年各季度销售量为例,逐步解析单组柱形图的完整代码。代码结构说明环境配置导入matplotlib,设置中文字体与负号显示数据准备定义xlabel_list(季度标签)、sales_2024(销售量数据)、x(基准坐标)绘制柱形调用plt.bar(),设置x、height、label参数,保存BarContainer对象坐标轴设置ylim(10,40)、ylabel、xticks、xlabel数值标签遍历rects1,用plt.text()在柱顶显示数值完成图表设置标题、图例,调用plt.show()年销售量统计图:关键参数说明以下为绘制2024年各季度销售量柱形图时所用到的关键参数及其含义。参数值说明xrange(4)x轴基准坐标heightsales_2024柱形高度(销售量)label"2024年"图例标签ylim(10,40)y轴范围,突出差异ha"center"数值标签水平居中va"bottom"数值标签底部对齐单组销售量统计代码importmatplotlib.pyplotaspltplt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=Falsexlabel_list=['第一季度','第二季度','第三季度','第四季度']sales_2024=[15,20,18,25]x=range(len(xlabel_list))rects1=plt.bar(x=x,height=sales_2024,label="2024年")plt.ylim(10,40)plt.ylabel("销售量(单位:万件)")plt.xticks([indexforindexinx],xlabel_list)plt.xlabel("季度")forrectinrects1:x_pos=rect.get_x()+rect.get_width()/2height=rect.get_height()plt.text(x_pos,height+1,str(height),ha="center",va="bottom")plt.title("销售量统计")plt.legend()plt.show()添加第二组数据:2023vs2024再提供2023年各季度销售量(13、21、22、28万件),使用簇状柱形图同时展示两年数据。调整柱宽每组含两个子柱,将默认柱宽从0.8调整为0.4平移位置将其中一组数据在x轴上向右平移0.4个单位,使两组柱子并排显示居中刻度使用index+0.2将刻度设置在两根子柱中间簇状柱形图:x轴坐标计算原理绘制簇状柱形图时,x轴坐标的计算是核心难点。以两组数据、柱宽0.4为例详细说明。第一组柱形(2024年)x坐标:x=range(4),即[0,1,2,3]柱宽:width=0.4每根柱的中心位置:0,1,2,3第二组柱形(2023年)x坐标:[i+0.4foriinx],即[0.4,1.4,2.4,3.4]柱宽:width=0.4每根柱的中心位置:0.4,1.4,2.4,3.4x轴刻度居中两组柱形的中间位置:[i+0.2foriinx],即[0.2,1.2,2.2,3.2]代码:plt.xticks([index+0.2forindexinx],xlabel_list)刻度标签显示在两根子柱正中间簇状柱形图:x轴坐标计算代码根据坐标计算原理,对应的代码实现如下。#第一组:x坐标为[0,1,2,3]rects1=plt.bar(x=x,height=sales_2024,width=0.4,label="2024年")#第二组:x坐标右移0.4,为[0.4,1.4,2.4,3.4]rects2=plt.bar(x=[i+0.4foriinx],height=sales_2023,width=0.4,color='lightblue',label="2023年")#刻度标签居中,位于[0.2,1.2,2.2,3.2]plt.xticks([index+0.2forindexinx],xlabel_list)2023vs2024销售量对比对比可见,2023年在第二至第四季度销量均高于2024年,但2024年第一季度表现更优。簇状柱形图让年度对比一目了然。簇状柱形图完整代码importmatplotlib.pyplotaspltplt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=Falsexlabel_list=['第一季度','第二季度','第三季度','第四季度']sales_2024=[15,20,18,25]sales_2023=[13,21,22,28]x=range(len(xlabel_list))rects1=plt.bar(x=x,height=sales_2024,width=0.4,label="2024年")rects2=plt.bar(x=[i+0.4foriinx],height=sales_2023,width=0.4,color='lightblue',label="2023年")plt.ylim(10,40)plt.ylabel("销售量(单位:万件)")plt.xticks([index+0.2forindexinx],xlabel_list)plt.xlabel("季度")簇状柱形图代码(续)#设置文本forrectinrects1:x_pos=rect.get_x()+rect.get_width()/2height=rect.get_height()plt.text(x_pos,height+1,str(height),ha="center",va="bottom")forrectinrects2:x_pos=rect.get_x()+rect.get_width()/2height=rect.get_height()plt.text(x_pos,height+1,str(height),ha="center",va="bottom")plt.title("销售量统计")plt.legend()plt.show()核心要点:两次调用plt.bar(),通过x坐标偏移和width参数控制柱形并排排列。簇状柱形图绘制要点绘制簇状柱形图时,需要在单柱图基础上进行以下关键调整。①调整柱宽将默认柱宽从0.8调整为0.4(每组含两个子柱时),确保两组柱形不重叠代码:width=0.4②平移第二组将第二组柱形在x轴上向右平移一个柱宽距离,使两组柱子并排显示代码:x=[i+0.4foriinx]③居中刻度标签将x轴刻度设置在两根子柱中间,使标签对应整组数据代码:plt.xticks([index+0.2forindexinx],xlabel_list)④区分颜色为不同数据系列设置不同颜色,并配合label参数添加图例代码:color='lightblue',label="2023年"数据分组数不宜过多,每组的分类项最好不多于4项,否则图表会显得拥挤难以阅读。簇状柱形图绘制流程回顾从单柱图到簇状柱形图的完整绘制流程。01准备多组数据定义多个数据列表(如sales_2024、sales_2023)及x轴标签列表02绘制第一组柱形调用plt.bar(x=x,height=data1,width=0.4,label="2024年")03绘制第二组柱形调用plt.bar(x=[i+0.4foriinx],height=data2,width=0.4,color='lightblue',label="2023年")04居中设置刻度标签plt.xticks([index+0.2forindexinx],xlabel_list)05为每组柱形添加数值标签分别遍历rects1和rects2,调用plt.text()在柱顶显示数值06完善图表元素设置坐标轴标签、标题、图例,调用plt.show()显示柱形图关键技巧总结3.1柱形图小节总结本节系统介绍了柱形图的核心知识,从基础概念到实战代码,完整覆盖单柱图与簇状柱形图的绘制方法。1核心方法plt.bar()绘制柱形plt.xticks()设置刻度标签plt.ylim()/plt.xlim()设置坐标轴范围plt.text()在柱形上显示数值plt.legend()/plt.title()图例与标题2单柱图要点5行代码即可绘制基础单柱图通过xticks添加分类标签合理设置ylim放大数据差异遍历BarContainer添加数值标签3簇状柱形图要点柱宽调整为0.4(两组数据时)第二组x坐标右移一个柱宽刻度标签居中设置(偏移半个柱宽)每组数据系列使用不同颜色区分下一节将介绍折线图(3.2),学习如何展示数据的趋势与变化。3.2折线图折线图概述在折线图中,类别数据沿x轴均匀分布,所有值数据沿y轴均匀分布。折线图非常适用于展示连续的二维数据,如网站访问人数或商品销量的波动。适用场景展示事物的发展趋势比较多个不同的数据序列呈现时间维度上的连续变化折线图适用场景与注意事项折线图是展示数据趋势与变化的核心图表类型,但使用时需注意以下规范。⚠️注意事项用实线描绘数据线,确保能清晰区分数据线与坐标轴线所有数据点应清楚、易识别避免绘制超过4条数据线,否则线条会重叠,导致图表杂乱难以阅读和对比数据点应按x坐标顺序排列折线图与柱形图的核心区别:折线图强调"趋势与变化",柱形图强调"数值大小对比"。matplotlib.pyplot.plot()方法使用matplotlib.pyplot.plot([x],y,[fmt],*,data=None,**kwargs)方法绘制折线图。参数说明x,y数据点的横纵坐标(x为可选参数,默认取0,1,...len(y)-1)fmt格式字符串(如"ro"表示红色圆点)**kwargs线条属性设置(如linewidth=2表示线宽为2)绘制多组折线时,可通过不同颜色或标记符号区分。plot()方法参数详解参数类型说明linewidth可选线条宽度,如linewidth=3表示线宽为3color可选线条颜色,如color='r'表示红色marker可选数据点标记符号,如marker='o'表示圆点,marker='^'表示三角markerfacecolor可选标记符号的填充颜色,如markerfacecolor='yellow'label可选图例标签,需配合plt.legend()使用fmt格式字符串详解fmt是plot()方法的格式字符串参数,可以用简洁的方式同时指定颜色、标记和线型。格式:fmt='[颜色][标记][线型]'颜色代码代码颜色'b'蓝色(默认)'r'红色'g'绿色'k'黑色'y'黄色'm'品红色'c'青色'w'白色标记符号代码标记'o'圆点'^'上三角's'正方形'*'星形'+'加号'x'叉号'D'菱形'.'小点标记符号示例黄色圆点标记marker='o',markerfacecolor='yellow'红色三角标记color='r',marker='^'由于折线图数据点按x坐标对应,不需额外调整位置,只需多次调用plt.plot()即可绘制多条折线。多折线图绘制原理折线图与柱形图的关键区别在于:折线图数据点按x坐标自动对应,无需手动调整位置偏移。柱形图(需手动偏移)多组数据需要手动调整x坐标偏移每组柱形需要计算位置:x=[i+0.4foriinx]刻度标签也需要居中调整折线图(自动对应)多条折线只需多次调用plt.plot()数据点按x坐标自动对齐无需任何位置偏移计算#绘制多条折线,只需多次调用plt.plot()plt.plot(x1,y1,label='商品1',linewidth=3,color='r',marker='o',markerfacecolor='yellow')plt.plot(x2,y2,label='商品2',marker='^')#两条折线会自动按x坐标对齐,无需偏移这是折线图相比柱形图在代码实现上更简洁的优势之一。示例:商品价格趋势双折线图假设有两组商品10天的价格数据:商品1[12,18,5,40,32,60,70,12,57,25]红色加粗线条+黄色圆点商品2[4,7,0,28,20,40,53,10,41,18]默认颜色+蓝色三角标记调用两次plt.plot()即可绘制出两组商品的对比价格趋势双折线图。双折线图:数据准备与绘制以两组商品10天价格数据为例,说明双折线图的数据准备与绘制方式。数据定义y1=[12,18,5,40,32,60,70,12,57,25]x1=range(0,10)y2=[4,7,0,28,20,40,53,10,41,18]x2=range(0,10)说明:x1和x2均为0~9的整数序列,代表第1天到第10天y1为商品1的价格数据(单位:元)y2为商品2的价格数据(单位:元)两组数据共享相同的x轴坐标,无需偏移样式参数对比参数商品1商品2linewidth3(加粗)默认color'r'(红色)默认marker'o'(圆点)'^'(三角)markerfacecolor'yellow'默认label'商品1''商品2'两组折线使用不同的颜色和标记符号,便于读者在图表中快速区分两条数据线。商品价格趋势可视化两组商品价格走势高度相关,商品1价格始终高于商品2。第7天两者均达到峰值,第8天急剧回落。双折线图完整代码importmatplotlib.pyplotaspltplt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=Falsey1=[12,18,5,40,32,60,70,12,57,25]x1=range(0,10)x2=range(0,10)y2=[4,7,0,28,20,40,53,10,41,18]plt.plot(x1,y1,label='商品1',linewidth=3,color='r',marker='o',markerfacecolor='yellow')plt.plot(x2,y2,label='商品2',marker='^')plt.xlabel('时间/天')plt.ylabel('价格/元')plt.title('双折线图')plt.legend()plt.show()折线图代码逐行解析对双折线图完整代码的逐行解析,帮助理解每一步的作用。第1-3行:环境配置importmatplotlib.pyplotaspltplt.rcParams['font.sans-serif']=['SimHei']#支持中文显示plt.rcParams['axes.unicode_minus']=False#正常显示负号第4-7行:准备数据定义两组商品的价格数据列表y1、y2,以及对应的x轴坐标x1、x2(均为0到9的整数序列)第8-9行:绘制两条折线第一条:红色加粗线+黄色圆点(plt.plot(x1,y1,...))第二条:默认颜色+蓝色三角标记(plt.plot(x2,y2,...))第10-12行:完善图表元素设置x轴标签"时间/天"、y轴标签"价格/元"、图表标题"双折线图"第13-14行:显示图例与图表plt.legend()显示图例,plt.show()渲染并展示图表折线图绘制流程回顾使用matplotlib绘制折线图的完整流程总结。01导入库并配置中文importmatplotlib.pyplotasplt#设置rcParams支持中文字体与负号显示plt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=False02准备数据定义x轴坐标序列(如range(0,10))和y轴数据列表03调用plt.plot()绘制折线传入x、y数据及样式参数(color、linewidth、marker、markerfacecolor、label)04多组数据重复调用每组数据调用一次plt.plot(),无需偏移,数据点自动按x坐标对齐05完善图表元素设置xlabel、ylabel、title,调用plt.legend()显示图例06显示图表调用plt.show()渲染并展示最终折线图折线图样式进阶技巧掌握以下进阶技巧,让折线图更加专业美观。网格线使用plt.grid(True)添加背景网格线,提升数据读取精度plt.grid(True,linestyle='--',alpha=0.7)坐标轴范围使用plt.xlim()和plt.ylim()控制显示范围,聚焦关键数据区间plt.ylim(0,80)图表尺寸使用plt.figure(figsize=(10,6))在绘图前设置画布大小plt.figure(figsize=(10,6))标注特殊点使用plt.annotate()在关键数据点(如峰值)添加文字标注plt.annotate('峰值',xy=(6,70),xytext=(5,75))#综合示例plt.figure(figsize=(10,6))plt.grid(True,linestyle='--',alpha=0.7)plt.ylim(0,80)plt.plot(x1,y1,label='商品1',linewidth=3,color='r',marker='o',markerfacecolor='yellow')plt.plot(x2,y2,label='商品2',marker='^')plt.legend()plt.show()3.2折线图小节总结本节系统介绍了折线图的核心知识,从基础概念到双折线图的完整实现,掌握用折线图展示趋势与对比的方法。1核心方法plt.plot()绘制折线fmt格式字符串(颜色+标记+线型)linewidth/color/marker样式参数markerfacecolor标记填充颜色plt.grid()添加网格线(进阶)2单折线图要点x参数可选,默认从0开始通过color、linewidth控制线条样式通过marker设置数据点标记配合label+legend()显示图例3多折线图要点多次调用plt.plot()即可绘制多条折线无需手动偏移x坐标(与柱形图不同)数据点按x坐标自动对齐建议不超过4条折线,避免图表杂乱折线图强调"趋势与变化",柱形图强调"数值大小对比",根据分析目的选择合适的图表类型。柱形图vs折线图:如何选择?柱形图适合离散数据的大小比较,强调各项之间的差距。如不同类别的销量、不同地区的人口。折线图适合连续数据的趋势展示,强调随时间的变化规律。如股价走势、温度变化。图表类型选择决策树根据数据特征和分析目的,快速选择最合适的图表类型。Step1:数据是连续的还是离散的?连续数据(时间序列、趋势)→考虑折线图离散数据(分类、比较)→考虑柱形图Step2:分析目的是什么?展示趋势变化→折线图比较数值大小→柱形图(单柱图)多组数据对比→簇状柱形图展示占比构成→堆积柱形图Step3:数据系列有多少组?1组→单柱图/单折线图2-4组→簇状柱形图/多折线图超过4组→考虑拆分图表或使用其他图表类型没有绝对"最好"的图表类型,关键在于选择最能清晰传达数据含义的形式。matplotlib中文显示配置详解在使用matplotlib绘制含中文的图表时,必须进行字体配置,否则中文会显示为乱码。必要配置代码plt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=False说明:第一行:指定使用"黑体"(SimHei)字体,支持中文显示第二行:确保负号(-)能正常显示,避免显示为方块常用中文字体列表1'SimHei'黑体2'MicrosoftYaHei'微软雅黑3'FangSong'仿宋4'KaiTi'楷体5'SimSun'宋体这两行配置代码应放在所有绘图代码之前,是绘制中文图表的标准开头。本章所有示例代码均包含此配置。plt.text()方法详解plt.text()方法用于在图表的指定位置添加文字标注,是在柱形上显示数值的核心方法。参数类型说明x必填文字的x坐标位置y必填文字的y坐标位置s必填要显示的文字内容(字符串)ha可选水平对齐方式:'center'(居中)、'left'(左对齐)、'right'(右对齐)va可选垂直对齐方式:'bottom'(底部)、'top'(顶部)、'center'(居中)fontsize可选文字大小,如fontsize=10color可选文字颜色,如color='black'#在柱形上方居中显示数值plt.text(x_pos,height+1,str(height),ha="center",va="bottom")#参数说明:#x_pos=柱形中心x坐标#height+1=柱形高度上方1个单位(避免文字与柱形重叠)#str(height)=将数值转为字符串显示#ha="center"=文字水平居中对齐height+1中的"+1"是为了让文字显示在柱形顶部上方,避免遮挡。实际偏移量应根据y轴数据范围适当调整。3.1-3.2核心要点回顾1柱形图基础使用plt.bar()绑定数据,通过xticks、ylim、text等方法完善图表元素2簇状柱形图通过调整width和x坐标偏移实现多组数据并排对比,分组不超过4项3折线图使用plt.plot()展示连续数据趋势,多次调用即可绘制多条折线,线条不超过4条实践建议动手实践将本章代码在JupyterNotebook中逐行运行,修改参数观察变化美化图表尝试调整颜色、线宽、标记符号,让图表更具专业感真实数据用自己的数据集替换示例数据,体验可视化在实际分析中的价值3.3箱线图也称盒式图、箱须图,广泛应用于品质管理与异常值识别什么是箱线图?箱线图利用5个统计量(最小值、下四分位数、中位数、上四分位数、最大值)描述数据分布,因形状像箱子而得名。尤其适用于多样本比较,能粗略显示数据的对称性与分散程度。箱线图的核心优势不受异常值影响准确稳定地描绘数据分布数据清洗利器有利于识别和处理异常数据多样本对比直观比较不同组别的数据分布箱线图的表达形式关键组成部分中间线→中位数箱子顶部→上四分位数Q3箱子底部→下四分位数Q1上须→最大值(非异常范围内)下须→最小值(非异常范围内)示例数据箱线图参数解读以序列12,15,17,19,20,23,25,28,30,33,34,35,36,37为例,逐步计算各统计量。四分位数将数据分为四等份,需先确定位置再计算值。位置公式:Qi=i(n+1)/4(i=1,2,3)计算四分位数1下四分位数Q1位置=(14+1)/4=3.75Q1=第3项×0.25+第4项×0.75=17×0.25+19×0.75=18.52中位数Q2位置=2(14+1)/4=7.5Q2=第7项×0.5+第8项×0.5=25×0.5+28×0.5=26.53上四分位数Q3位置=3(14+1)/4=11.25Q3=第11项×0.75+第12项×0.25=34×0.75+35×0.25=34.25计算四分位距与边界值1四分位距IQRIQR=Q3−Q1=34.25−18.5=15.752上边界(最大值)Q3+1.5×IQR=34.25+23.625=57.8753下边界(最小值)Q1−1.5×IQR=18.5−23.625=−5.125异常值的判定异常值被定义为小于Q1−1.5×IQR或大于Q3+1.5×IQR的值。1下边界Q1−1.5×IQR=18.5−23.625=−5.1252上边界Q3+1.5×IQR=34.25+23.625=57.8753本例结论序列中所有数据均在[−5.125,57.875]范围内,无异常值小于下边界或大于上边界的数据点即为异常值,在箱线图中以独立符号(如"+"或"x")标出。箱线图绘制使用matplotlib实现箱线图的Python编程实践boxplot()核心参数x指定要绘制箱线图的数据positions指定箱体位置,默认[1,2,…]whiskerprops设置须的属性(颜色、线宽、线型)showfliers/sym控制异常值显示及标记符号boxplot()更多参数boxprops设置箱体属性(边框色、填充色)showmeans控制是否显示均值,默认Falsepatch_artist控制是否填充箱体颜色,默认False注意:patch_artist和boxprops必须配合使用,单独使用boxprops设置颜色但不设置patch_artist,颜色将不会显示。patch_artist与boxprops的配合使用需要注意的是,patch_artist和boxprops必须配合使用,单独使用boxprops设置颜色但不设置patch_artist,颜色将不会显示。❌错误用法ax.boxplot(data,boxprops={'facecolor':'#9999ff'})#颜色不会显示!仅设置boxprops而未启用patch_artist,填充色无效。✅正确用法ax.boxplot(data,boxprops={'color':'black','facecolor':'#9999ff'},patch_artist=True)#颜色正常显示同时设置patch_artist=True,填充色才能生效。模拟数据生成两个班级三门课程使用np.random.normal(mean,std,size)生成符合正态分布的随机成绩数据。科目班级均值标准差语文一班903语文二班802数学一班705数学二班607英语一班757英语二班605np.random.normal()数据生成说明利用np.random.normal(mean,std,size)函数模拟生成两个班级的语文、数学、英语3门课程成绩数据。normal()函数用于生成符合正态分布的随机数,3个参数依次是均值、标准差、生成数据的个数。YuWen_C1=np.random.normal(90,3,size=40)#一班语文YuWen_C2=np.random.normal(80,2,size=50)#二班语文Math_C1=np.random.normal(70,5,size=40)#一班数学Math_C2=np.random.normal(60,7,size=50)#二班数学Eng_C1=np.random.normal(75,7,size=40)#一班英语Eng_C2=np.random.normal(60,5,size=50)#二班英语#按班级分组C1_data=[YuWen_C1,Math_C1,Eng_C1]C2_data=[YuWen_C2,Math_C2,Eng_C2]科目一班均值二班均值说明语文9080一班成绩更高数学7060一班成绩更高英语7560一班成绩更高一班成绩箱线图代码fig,ax=plt.subplots(figsize=(8,6))ind=np.arange(len(C1_data))bplot0=ax.boxplot(C1_data,positions=ind,whiskerprops={'color':'#9999ff'},sym='rx',boxprops={'color':'black','facecolor':'#9999ff'},showmeans=True,patch_artist=True)一班成绩箱线图效果紫色箱体展示语文、数学、英语三科成绩分布,红色×标记异常值,显示均值点。多组数据箱线图要点设置箱体间距positions=ind+0.35保持两组箱体距离居中标签set_xticks(ind+dev/2)将标签置于两组中间区分颜色一班紫色、二班绿色,通过图例区分两班对比箱线图完整代码importnumpyasnpimportmatplotlib.pyplotaspltplt.rcParams['font.sans-serif']=['SimHei']plt.rcParams['axes.unicode_minus']=False#生成数据YuWen_C1=np.random.normal(90,3,size=40)YuWen_C2=np.random.normal(80,2,size=50)Math_C1=np.random.normal(70,5,size=40)Math_C2=np.random.normal(60,7,size=50)Eng_C1=np.random.normal(75,7,size=40)Eng_C2=np.random.normal(60,5,size=50)C1_data=[YuWen_C1,Math_C1,Eng_C1]C2_data=[YuWen_C2,Math_C2,Eng_C2]ind=np.arange(len(C1_data))dev=0.35绘图与样式设置代码fig,ax=plt.subplots(figsize=(8,6))bplot0=ax.boxplot(C1_data,positions=ind,whiskerprops={'color':'#9999ff'},sym='rx',boxprops={'color':'black','facecolor':'#9999ff'},showmeans=True,patch_artist=True)bplot1=ax.boxplot(C2_data,positions=ind+dev,whiskerprops={'color':'lightgreen'},sym='ro',boxprops={'color':'black','facecolor':'lightgreen'},showmeans=True,patch_artist=True)ax.set_xticks(ind+dev/2)ax.set_xticklabels(('语文','数学','英语'))plt.legend((bplot0['boxes'][0],bplot1['boxes'][0]),('一班','二班'))ax.set_title('各班分数分布情况')plt.show()两班成绩对比效果紫色为一班、绿色为二班,直观对比各科成绩分布差异。一班语文成绩明显高于二班,数学和英语同样领先。3.4词云图将文本数据转化为直观的视觉呈现什么是词云图?词云图是一种直观的文本可视化方式。出现频率越高的词语以更大字号呈现,突显其重要性。它将艺术表现与科学分析相结合,利用人脑对视觉信息的天然偏好,让读者快速捕捉文本核心主题。词云图的适用场景适合使用演讲稿关键词分析博客文章主题提取社交媒体热词展示⚠️注意事项文本未经上下文优化就输入词云生成器,结果往往难以辨别有效信息。需要先进行文本预处理。wordcloud库安装pip安装pipinstallwordcloudconda安装condainstall-cconda-forgewordcloud词云图生成三步走CreateWordCloudInstantiateWordCloudobjectSaveImageUseto_file()towritePNGLoadTextCallgenerate()withcontentwordcloud库将词云抽象为WordCloud对象,通过创建实例、加载文本、保存图片三步完成词云生成。最简词云代码fromwordcloudimportWordCloudw=WordCloud()w.generate("PythonandWordCloud")w.to_file("outfile.png")运行即可生成outfile.png,WordCloud会根据词频自动调整字号大小。在程序中显示词云使用imshow()显示importmatplotlib.pyplotaspltplt.imshow(w)plt.axis("off")plt.show()imshow()将图片对象显示在二维坐标轴上,axis("off")隐藏坐标轴。实战案例《爱丽丝漫游仙境》词云以经典小说文本为例,演示完整的词云图生成流程。爱丽丝词云完整代码fromwordcloudimportWordCloudimportmatplotlib.pyplotaspltf=open('alice.txt','r').read()wordcloud=WordCloud(background_color="white",width=1000,height=860,margin=2).generate(f)plt.imshow(wordcloud)plt.axis("off")plt.show()wordcloud.to_file('alice.png')WordCloud配置参数background_color指定词云背景颜色width/height设置词云图的宽度和高度margin设置词语之间的间距generate()自动对全部文本进行分词(中文效果不佳)WordCloud完整参数示例代码综合运用WordCloud的多个参数,生成高质量词云图。fromwordcloudimportWordCloudimportmatplotlib.pyplotasplt#读取文本f=open('alice.txt','r').read()#创建词云对象,配置多个参数wordcloud=WordCloud(background_color="white",#背景颜色width=1000,#词云宽度height=860,#词云高度margin=2,#词语间距max_words=200,#最多显示词数max_font_size=100,#最大字号min_font_size=10,#最小字号colormap='viridis'#配色方案).generate(f)#显示词云plt.figure(figsize=(10,8))plt.imshow(wordcloud,interpolation='bilinear')plt.axis("off")plt.tight_layout()plt.show()#保存图片wordcloud.to_file('alice.png')generate()方法会自动对英文文本进行分词,但对中文分词效果不佳,中文文本需先用jieba进行分词处理。停用词处理过滤无意义高频词,提升词云质量为什么需要停用词?在爱丽丝词云中,"said"出现频率极高却无实际意义。停用词处理可过滤这类词汇,让核心主题更突出。停用词的两大类别功能词:中文"是""的""在",英文"the""is""at"词汇词:中文"想""说",英文"want""said"添加停用词通过wordcloud.STOPWORDS添加停用词,将无意义的高频词从词云中剔除。stopwords=set(wordcloud.STOPWORDS)stopwords.add("said")wc=WordCloud(stopwords=stopwords,background_color="white").generate(text)停用词处理效果对比通过wordcloud.STOPWORDS添加停用词后,词云图中无意义的高频词将被过滤,核心主题词更加突出。处理前未添加停用词,"said"等无意义词占据显著位置,干扰主题识别。wc=WordCloud(background_color="white").generate(text)处理后添加停用词后,"Alice"、"Queen"、"rabbit"等核心词汇更加突出,主题一目了然。stopwords=set(wordcloud.STOPWORDS)stopwords.add("said")wc=WordCloud(stopwords=stopwords,background_color="white").generate(text)可以持续向stopwords集合中添加多个无意义词,直到词云图呈现出满意的效果为止。Alice词云在词云图中,可以明显发现"said"一词出现得非常频繁,却没有实际意义。因此可以考虑对其进行"停用词"处理。停用词是指在信息检索中,为节省存储空间和提高搜索效率,在处理自然语言数据之前或之后自动过滤掉某些字或词。图像显示优化通过参数调整让词云图更清晰美观imshow()显示优化参数1Scale参数默认值为1,值越大图像细节越丰富、越清晰2interpolation参数图像插值方式,对图像分辨率进行重建处理不同插值方式(如bilinear、nearest等)会产生不同的显示效果,可自行测试对比。不同图像插值方法对比图3-13展示了若干种图像插值的显示效果,读者可以自行测试,查看不同图像插值方式的效果。None(默认)不进行插值处理,显示原始像素bilinear(双线性)平滑过渡,适合词云图显示,效果柔和nearest(最近邻)保留像素边缘,图像较为锐利bicubic(双三次)高质量插值,细节更丰富,计算量较大推荐使用interpolation="bilinear"参数,可使词云图显示效果更加平滑清晰。中文词云处理要点处理中文词云时,需要额外注意字体和分词两个关键问题。🔤中文字体设置默认WordCloud不支持中文,需通过font_path参数指定中文字体常用字体:simsun.ttc(宋体)、simhei.ttf(黑体)字体文件需放在程序工作目录或指定完整路径wc=WordCloud(font_path="simsun.ttc",background_color="white")✂️中文分词(jieba)中文词语之间没有空格,需先分词再生成词云使用jieba库进行中文分词jieba.cut()返回分词结果的生成器importjiebatext="中文文本内容..."words="".join(jieba.cut(text))wc.generate(words)图形化词云图使用蒙版(mask)指定词云形状,增强视觉表现力蒙版词云原理
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026安全产品面试题目大全及答案
- 锅炉安全检查培训课件
- 2025年区块链溯源在冷链物流的应用
- 期末综合测试卷(二)《思政 心理健康与职业生涯》(高教版) 答案
- 隔离酒店保洁外包合同
- 广东省江门市2026年高三语文一模考试试卷(含答案)
- 中级注册安全工程师《安全生产技术》高频考点
- 2026年CATTI考试真题历年真题
- 2026年药学考试问答试题及答案
- 护理重症患者护理策略讨论
- 2026年北京市石景山区初三二模英语试卷(含答案及解析)
- 广告牌安装外包合同
- GB/T 47328.3-2026乳及乳制品感官分析第3部分:产品感官特性符合性评价评分法
- 2026汽车后市场行业格局与消费趋势研究报告
- 2025年中国海洋大学辅导员和专职党政管理人员招聘考试真题
- 2026年山东省济南市历下区中考化学二模试卷(含答案)
- 2026国家粮食和物资储备局招聘面试题库
- 2026年超星尔雅学习通尔雅文艺复兴史试卷押题宝典试题附答案详解(突破训练)
- 2026年苏教版小学四年级数学上册期中卷含答案
- 2026年4月浙江卷高考预测模拟数学试卷01
- 2026年洗涤厂转让合同(1篇)
评论
0/150
提交评论