当前位置: 首页 > ops >正文

Python之matplotlib 基础三:绘制折线图

上效果:
在这里插入图片描述
请添加图片描述

import matplotlib.pyplot as plt
import matplotlibmatplotlib.use('TkAgg')  # 设置后端为 TkAgg,使得程序可以在 Tkinter 窗口中显示# 使用xkcd风格,使得图形更有漫画风格
plt.xkcd()# 设置支持 CJK 字符的字体(例如:微软雅黑),保证图形中的中文能够正确显示
matplotlib.rcParams['font.family'] = 'Microsoft YaHei'ages_x = [18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55]py_dev_y = [20046, 17100, 20000, 24744, 30500, 37732, 41247, 45372, 48876, 53850, 57287, 63016, 65998, 70003, 70000, 71496, 75370, 83640, 84666,84392, 78254, 85000, 87038, 91991, 100000, 94796, 97962, 93302, 99240, 102736, 112285, 100771, 104708, 108423, 101407, 112542, 122870, 120000]
plt.plot(ages_x, py_dev_y, label='Python')js_dev_y = [16446, 16791, 18942, 21780, 25704, 29000, 34372, 37810, 43515, 46823, 49293, 53437, 56373, 62375, 66674, 68745, 68746, 74583, 79000,78508, 79996, 80403, 83820, 88833, 91660, 87892, 96243, 90000, 99313, 91660, 102264, 100000, 100000, 91660, 99240, 108000, 105000, 104000]
plt.plot(ages_x, js_dev_y, label='JavaScript')dev_y = [17784, 16500, 18012, 20628, 25206, 30252, 34368, 38496, 42000, 46752, 49320, 53200, 56000, 62316, 64928, 67317, 68748, 73752, 77232,78000, 78508, 79536, 82488, 88935, 90000, 90056, 95000, 90000, 91633, 91660, 98150, 98964, 100000, 98988, 100000, 108923, 105000, 103117]
plt.plot(ages_x, dev_y, color='#444444', linestyle='--', label='All Devs')plt.xlabel('年龄')
plt.ylabel('薪资统计 (元)')
plt.title('薪资统计 (元) --年龄段')plt.legend()plt.tight_layout()plt.savefig('plot.png')plt.show()

这里值得说一下的是:
xkcd 风格会使用 matplotlib 自带的一些特殊字体,并且这些字体可能不支持 CJK 字符(如中文、日文和韩文)。

解决方法:
要在 xkcd 风格下正确显示中文,您可以手动设置支持 CJK 字符的字体。例如,在使用 plt.xkcd() 后,重新设置字体为 Microsoft YaHei 或其他支持中文的字体。

这段代码使用了 matplotlib 库,目的是生成一个带有三条线的图表,展示不同编程语言(Python、JavaScript)以及所有开发者薪资随着年龄变化的关系,并使用 xkcd 风格进行绘制。下面将逐步分析这段代码,以及其中用到的语法。

代码解析:

import matplotlib.pyplot as plt
import matplotlib
  • import matplotlib.pyplot as plt:导入 matplotlibpyplot 模块,用于创建和管理图形。pyplot 提供了类似 MATLAB 的接口,简化了图形的绘制过程。
  • import matplotlib:导入 matplotlib,但此处实际没有使用。可以省略。
matplotlib.use('TkAgg')  # 设置后端为 TkAgg,使得程序可以在 Tkinter 窗口中显示
  • matplotlib.use('TkAgg'):设置图形显示的后端为 TkAgg,这使得图形可以嵌入到 Tkinter 窗口中进行显示。TkAgg 是一种常用的图形后端,支持在 GUI 窗口中显示图形。
# 使用xkcd风格,使得图形更有漫画风格
plt.xkcd()
  • plt.xkcd():启用 xkcd 风格,使图形呈现漫画风格。该风格使得绘制的图形具有手绘效果,增加了趣味性。
# 设置支持 CJK 字符的字体(例如:微软雅黑),保证图形中的中文能够正确显示
matplotlib.rcParams['font.family'] = 'Microsoft YaHei'
  • matplotlib.rcParams['font.family']:设置全局字体为 Microsoft YaHei(微软雅黑),确保图形中的中文能够正确显示。如果不设置,可能会出现中文无法显示的问题。
ages_x = [18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55]
  • ages_x:定义了一个列表,表示年龄段。这些值将作为横坐标(x 轴)。
py_dev_y = [20046, 17100, 20000, 24744, 30500, 37732, 41247, 45372, 48876, 53850, 57287, 63016, 65998, 70003, 70000, 71496, 75370, 83640, 84666,84392, 78254, 85000, 87038, 91991, 100000, 94796, 97962, 93302, 99240, 102736, 112285, 100771, 104708, 108423, 101407, 112542, 122870, 120000]
  • py_dev_y:定义了一个列表,表示与 ages_x 中的每个年龄段对应的 Python 开发者的薪资。这个数据将作为纵坐标(y 轴)。
plt.plot(ages_x, py_dev_y, label='Python')
  • plt.plot(ages_x, py_dev_y, label='Python'):绘制 ages_xpy_dev_y 之间的关系曲线,并为该曲线添加标签 'Python',这将在图例中显示。
js_dev_y = [16446, 16791, 18942, 21780, 25704, 29000, 34372, 37810, 43515, 46823, 49293, 53437, 56373, 62375, 66674, 68745, 68746, 74583, 79000,78508, 79996, 80403, 83820, 88833, 91660, 87892, 96243, 90000, 99313, 91660, 102264, 100000, 100000, 91660, 99240, 108000, 105000, 104000]
  • js_dev_y:定义了一个列表,表示 JavaScript 开发者的薪资数据,和 ages_x 对应。
plt.plot(ages_x, js_dev_y, label='JavaScript')
  • plt.plot(ages_x, js_dev_y, label='JavaScript'):绘制 JavaScript 开发者的薪资曲线,并为该曲线添加标签 'JavaScript'
dev_y = [17784, 16500, 18012, 20628, 25206, 30252, 34368, 38496, 42000, 46752, 49320, 53200, 56000, 62316, 64928, 67317, 68748, 73752, 77232,78000, 78508, 79536, 82488, 88935, 90000, 90056, 95000, 90000, 91633, 91660, 98150, 98964, 100000, 98988, 100000, 108923, 105000, 103117]
  • dev_y:定义了一个列表,表示所有开发者的薪资数据。
plt.plot(ages_x, dev_y, color='#444444', linestyle='--', label='All Devs')
  • plt.plot(ages_x, dev_y, color='#444444', linestyle='--', label='All Devs'):绘制所有开发者的薪资曲线,使用灰色虚线,并为该曲线添加标签 'All Devs'
plt.xlabel('年龄')
plt.ylabel('薪资统计 (元)')
plt.title('薪资统计 (元) --年龄段')
  • plt.xlabel('年龄'):设置 x 轴标签为 ‘年龄’
  • plt.ylabel('薪资统计 (元)'):设置 y 轴标签为 ‘薪资统计 (元)’
  • plt.title('薪资统计 (元) --年龄段'):设置图表的标题为 ‘薪资统计 (元) --年龄段’
plt.legend()
  • plt.legend():显示图例,图例会显示在图表的一个区域,标注每条曲线所代表的内容。
plt.tight_layout()
  • plt.tight_layout():调整图形布局,确保各部分(如标题、坐标轴标签、图例等)不重叠。
plt.savefig('plot.png')
  • plt.savefig('plot.png'):将生成的图形保存为 plot.png 文件。
plt.show()
  • plt.show():显示图形。

语法解析:

  • plt.plot():用来绘制图表,接受数据(x, y)、颜色、线型、标签等参数。
  • label:在 plt.plot() 中用于为每条曲线指定一个标签,这些标签会显示在图例中。
  • plt.xlabel(), plt.ylabel(), plt.title():分别设置 x 轴标签、y 轴标签和图形标题。
  • plt.legend():显示图例,帮助标识不同曲线的含义。
  • plt.tight_layout():自动调整子图参数,使得图表更紧凑,避免重叠。

总结:

这段代码绘制了三条曲线,分别表示不同编程语言(Python、JavaScript)和所有开发者的薪资随年龄变化的关系。使用了 xkcd 风格来增加图形的漫画效果,调整了图形中的中文显示并保存图形为文件。

如下图是尝试了几种统计图格式“:

格式1:
请添加图片描述
格式2:
在这里插入图片描述

格式3:
在这里插入图片描述

格式4:

在这里插入图片描述

import matplotlib
matplotlib.use('TkAgg')  # 设置后端为 TkAgg,使得程序可以在 Tkinter 窗口中显示
# 使用xkcd风格,使得图形更有漫画风格
# plt.xkcd()
# 设置支持 CJK 字符的字体(例如:微软雅黑),保证图形中的中文能够正确显示
matplotlib.rcParams['font.family'] = 'Microsoft YaHei'# plt.style.use('ggplot')
plt.style.use("fivethirtyeight")
ages_x = [25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35]dev_y = [38496, 42000, 46752, 49320, 53200,56000, 62316, 64928, 67317, 68748, 73752]# 格式1
# plt.plot(ages_x, dev_y, color="#444444", label="All Devs")
# 格式2
# plt.plot(ages_x, dev_y,color='red', linestyle='-', marker='o',label="平均薪资")
# 格式3
# plt.plot(ages_x, dev_y,color='red', linestyle='--', marker='o',label="平均薪资")
# 格式4
plt.plot(ages_x, dev_y,color='red', linestyle='dashed', marker='+',label="平均薪资")plt.legend()plt.title("薪资统计 (元) -- 年龄段")
plt.xlabel("年龄")
plt.ylabel("薪资统计 (元)")plt.tight_layout()
plt.savefig("MatplotlibS002_格式4.png")plt.show()
http://www.xdnf.cn/news/18650.html

相关文章:

  • 什么是JSON-RPC 2.0,在项目中应该怎么使用
  • Jenkins+docker 微服务实现自动化部署安装和部署过程
  • More Effective C++ 条款08:理解各种不同意义的new和delete
  • (操作系统)死锁是什么 必要条件 解决方式
  • 【Task05】:向量数据库实践(第三章3、4节)
  • Fory序列化与反序列化
  • ArcGIS JSAPI 高级教程 - 创建渐变色材质的自定义几何体
  • MYSQL(DDL)
  • 算法:驱动智能社会的核心引擎
  • OpenIM应用机器人自动应答
  • Zabbix 7.0中文乱码矫正
  • AI产品经理面试宝典第75天:Agentic RAG系统优化策略面试题实战解析
  • 08-系统能力调用与权限管理
  • BERT(Bidirectional Encoder Representations from Transformers)模型详解
  • 【RAGFlow代码详解-1】概述
  • 【Android】从一个AndroidRuntime看类的加载
  • 结构化智能编程:用树形向量存储重构AI代码理解范式
  • 第16届蓝桥杯C++中高级选拔赛(STEMA)2025年4月真题
  • More Effective C++ 条款05: 谨慎定义类型转换函数
  • 【Flex SerialPort】一个基于Qt6的支持自定义按键指令的串口工具
  • Kubernetes保姆级教学
  • centos搭建gitlab服务器
  • 【贪心算法】day2
  • 邮箱创建时间打标与自动删除功能设计思路
  • 13种常见机器学习算法面试总结(含问题与优质回答)
  • MySQL视图有什么用?一文读懂虚拟表的六大核心价值
  • String的最大长度剖析
  • 港口集装箱编号识别误识率↓79%!陌讯多模态融合算法落地优化
  • docker 镜像问题(解决了)
  • 第二重境:视角切换——用心灵的望远镜,看见问题的全局