欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 美景 > 5.Matplotlib:高级绘图

5.Matplotlib:高级绘图

2025/4/1 6:33:36 来源:https://blog.csdn.net/weixin_74727170/article/details/146544305  浏览:    关键词:5.Matplotlib:高级绘图

一 树形图

1.树形图的适用场景

可分为树图和矩形树图,将一个大的主题或问题分解为许多嵌套的小问题或细节。树形图是数据树的图形表示形式,以父子层次结构来组织对象。

树形图图形紧凑,同样大小的画布可以展现更多信息,以及成员间的权重。但是,也存在一些缺点,比如不够直观、明确,不像树图那么清晰,分类占比太小时不容易排布等缺点。

树形图适合展现具有层级关系的数据,能够直观体现同级之间的数据比较。

在商业领域,树形图可以用于展示公司的业务结构分析,包括公司组织架构、职位层次和业务分支等。根节点代表公司整体,子节点代表不同的业务部门或职位,叶子节点代表具体的操作或任务。

2.使用 squarify.plot()函数

导入 squarify 库。

黑龙江的销售额最多,为39.99万元,其次是山东,为37.65万元,再次是河南,为37.75万元。

 


二 误差条形图

1.误差条形图的适用场景

用于在条形图或折线图中显示每个数据点的误差范围。

误差条形图的构建需要指定两个数值:

1.每个条形或数据点的中心值。

2.误差范围,通常使用标准差或标准误差来表示。

这些误差值通常被绘制为两条垂直线,连接每个数据点和误差范围。误差条形图可以嵌入条形图或者折线图中,或者被作为单独的图表展示。

在医学研究中,误差条形图常用于显示药物或其他治疗的有效性和可靠性。在制造业领域,误差条形图能够帮助人们了解生产过程的稳定性和产品品质的变化情况。

2.使用 plt.bar()函数

 

该企业在2022年各个门店的销售额与业绩目标的差额。


三 火柴杆图

1.火柴杆图的适用场景

火柴杆图是用线条显示数据与 x 轴的距离,用一个小圆圈或者其他标记符号与线条相互连接,并在y轴上标记数据的的值。

适用于需要美观地显示各种类型下的数值到x轴的距离的情况。

2.使用 plt.step()函数

3.案例 

补充:代码解释。

markerline, stemlines, baseline = plt.stem(v1, v2, label=label):

调用plt.stem()绘制火柴杆图。

参数:

v1: x轴刻度标签(省份名称)

v2: y轴数值(平均延迟天数)

label: 设置图例标签

返回值:

markerline: 数据点标记对象(如圆圈)【红色圆形数据点】

stemlines: 连接数据点与基线的垂直线段对象【蓝色虚线连接数据点与基线】

baseline: 基线对象(默认在y=0处)【粗灰色实线作为基线】


plt.setp(markerline, color='red', marker='o'):

设置数据点标记的样式。

color='red': 将数据点颜色设为红色

marker='o': 设置数据点形状为圆形(默认是方形)

plt.setp(stemlines, color='blue', linestyle=':'):

设置连接数据点与基线的垂直线段样式。

color='blue': 将线段颜色设为蓝色

linestyle=':': 设置线型为虚线(默认是实线)


plt.setp(baseline, color='grey', linewidth=3, linestyle='-'):

设置基线(x轴)的样式。

该企业在2022年商品在大部分省份均有不同程度的延迟,平均延迟天数最久的是湖南省。 


四 甘特图

1.甘特图的适用场景

1.展示任务的时间安排

甘特图是一种项目计划管理工具,通过可视化的方式展示项目的时间进度和任务完成情况。

将项目划分为若干个任务,每个任务对应一个条形,任务的开始时间和结束时间分别对应条形的左右两端,每个任务的长度就对应着完成任务所需要的时间长短,整个甘特图就像一个时间轴。

2.表达任务之间的依赖关系、任务的负责人、预算和实际完成情况等信息

在甘特图中,任务之间可以用箭头、连接线等形式表示其关联关系,而任务的状态则可以用颜色、填充等样式来区分。

通过使用甘特图,项目管理者可以更加清晰地了解项目的进展和风险,及时做出调整和安排。

2.案例

绘制项目进度的甘特图来分析某企业信息化项目的进度情况。

补充:定义Gantt类,用于封装甘特图的绘制逻辑。

RdYlGr = ['#FF0000', '#f46d43', '#fdae61','#fee08b', '#ffffbf', '#d9ef8b','#a6d96a', '#A67D3D', '#FFFAF0']:

定义颜色列表,包含9种渐变色,用于不同任务条的颜色区分。

POS_START =1.0:设置任务条在y轴上的起始位置为1.0。

POS_STEP =0.5:设置每个任务条在y轴上的间隔步长为0.5。

补充:代码解释。

def __init__(self, tasks):定义类的初始化方法,接收任务列表参数。

self._fig = plt.figure(figsize=(15,10)):

创建 15x10 英寸的画布对象,存储到实例变量_fig中。

self._ax = self._fig.add_axes([0.1,0.1,.75,.5]):

在画布上添加坐标轴,参数[左,下,宽,高]定义轴的位置和大小。

self._tasks = tasks[::-1]:

将输入的任务列表反转存储到_tasks属性,用于从下到上绘制任务条。

补充:代码解释。

def _format_date(self, date_string):

定义私有方法,用于将日期字符串转换为 Matplotlib 可识别的日期格式。

date = datetime.datetime.strptime(date_string,'%Y-%m-%d %H:%M:%S'):

使用 strptime 解析日期字符串为datetime对象。

mpl_date = mdates.date2num(date):

将datetime对象转换为Matplotlib数值日期格式。

补充:

def _plot_bars(self):定义绘制任务条的方法。

i = 0:初始化计数器,用于遍历任务列表。

for task in self.tasks:遍历反转后的任务列表。

start = self._format_date(task['start']):获取任务开始时间的数值日期。

end = self._format_date(task[' end']):获取任务结束时间的数值日期。

bottom = (i * Gantt.POS_STEP) + Gantt.POS_START:计算任务条在y轴上的底部位置。

width = end - start:计算任务条的宽度(持续时间)。

self._ax.barh(...):绘制水平条形图。

bottom:y轴位置

width:条形宽度

left:起始位置

height:条形高度

align:对齐方式

label:图例标签

color:使用颜色列表中的颜色

i += 1:递增计数器,处理下一个任务。

补充:代码解释。

def _configure_yaxis(self):定义配置y轴的方法。

task_labels = [t[' label'] for t in self.tasks]:提取所有任务的标签名称。

pos = self._positions(len(task_labels)):计算每个标签在y轴上的位置。

ylocs = self._ax.set_yticks(pos):设置y轴刻度位置。

ylabels = self._ax.set_yticklabels(task_labels):设置y轴刻度标签为任务名称。

plt.setp(ylabels, size=15):设置y轴标签字体大小为15。

补充:代码解释。

def _configure_xaxis(self):定义配置x轴的方法。

self._ax.xaxis_date():设置x轴为日期格式。

rule = mdates.rrulewrapper(mdates.DAILY, interval=20)

创建日期规则:每20天一个主刻度。

loc = mdates.RRuleLocator(rule):创建基于规则的刻度定位器。

formatter = mdates.DateFormatter("%d %b")

创建日期格式化器,格式为"日 月"(如01 Jan)。

self._ax.xaxis.set_major_locator(loc):设置x轴主刻度位置。

self._ax.xaxis.set_major_formatter(formatter):设置x轴主刻度标签格式。

xlabels = self._ax.get_xticklabels():获取x轴刻度标签对象。

补充:代码解释。

self._ax.grid(True, color='gray'):添加灰色网格线。

self._set_legend():调用设置图例的方法。

self._fig.autofmt_xdate():自动旋转x轴日期标签,避免重叠。

补充:代码解释。

def _set_legend(self):定义设置图例的方法。

font = font_manager.FontProperties(size=15):创建字体属性对象,设置字体大小为15。

self._ax.legend(loc='upper right', prop=font):在右上角添加图例,使用指定字体。

补充:代码解释。

def positions(self, count):定义计算位置的方法。

end = count * Gantt.POS_STEP + Gantt.POS_START:计算y轴位置的结束值。

pos = np.arange(Gantt.POS_START, end, Gantt.POS_STEP):

生成从起始位置到结束位置,按步长递增的位置数组。

def show(self):定义显示图形的方法。

self._plot_bars():调用绘制条形的方法。

self._configure_figure():调用配置图形的方法。

plt.show():显示图形窗口。

补充:代码解释。

if __name__ == '__main__':主程序入口判断。

TEST_DATA = (...):定义测试数据,包含7个任务字典。

每个字典包含:

label:任务名称

start:开始时间(注意:部分结束时间早于开始时间,会导致负宽度)

end:结束时间

补充:代码解释。

gantt = Gantt(TEST_DATA):创建Gantt类实例,传入测试数据。

plt.xlabel(...):设置x轴标签为"项目日期",字体大小20。

plt.xticks(...):设置x轴刻度标签字体为Times New Roman,大小15。

plt.ylabel(...):设置y轴标签为"项目进度",字体大小20。

plt.yticks(...):设置y轴刻度标签字体为SimHei,大小15。

plt.title(...):设置图形标题为"项目进度甘特图",字体大小25。

plt.figure(figsize=(10,10))

创建新的10x10英寸画布(此操作会覆盖之前的画布设置)。

gantt.show():调用显示方法,但由于第65行创建了新画布,实际显示的是空图形。

 


五 自相关图

1.自相关图的适用场景

用于分析时间序列数据​,数据在不同时间点的相关性。

自相关系数衡量的是时间序列中当前值与滞后值之间的相关程度。

接近1:高度正相关,当前值与滞后值变化趋势一致。

接近0:相关性弱,当前值与滞后值变化无明显关联。

接近−1:高度负相关,当前值与滞后值变化趋势相反。

每日气温变化:假设你记录了一个城市连续30天的最低气温。

绘制自相关图后,会发现:

滞后1天:自相关系数很高(接近1),因为相邻两天的气温通常变化不大。滞后7天:自相关系数可能仍然较高,因为一周内的气温受天气系统影响,具有一定的连续性。滞后30天:自相关系数可能接近0,因为一个月后的气温与当前气温关联性较弱(除非有季节性因素)。

通过自相关图,你可以了解气温变化的短期和长期规律,为天气预报提供参考。

月度用电量:分析家庭或企业的月度用电量。

滞后1个月:自相关系数较高,因为用电量受季节、天气等因素影响,相邻月份用电量相似。

滞后12个月:自相关系数可能较高,因为用电量存在明显的季节性(如夏季空调用电多)。

通过自相关图,你可以预测未来用电量,优化能源使用计划。

交通流量:分析某路口不同时间段的交通流量。

滞后1小时:自相关系数较高,因为交通流量在短时间内具有连续性。

滞后24小时:自相关系数可能较高,因为交通流量存在明显的昼夜周期性。

通过自相关图,你可以预测交通拥堵时段,优化出行计划。

补充:应用场景。

2.案例

为了深入分析某企业的股票价格趋势,可以绘制股价的自相关图来进行分析。

 

该企业在2022年股票价格基本呈现上涨的趋势。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词