【数据操作与可视化】Matplotlib绘图-常用操作

【数据操作与可视化】Matplotlib绘图-常用操作

1、自定义刻度和风格
ini 复制代码
import matplotlib.pyplot as plt
import random
from pylab import mpl
# 设置显示中文字体
mpl.rcParams["font.sans-serif"] = ["SimHei"]
# 设置正常显示符号
mpl.rcParams["axes.unicode_minus"] = False
# 0.准备数据
x = range(60)
y_shanghai = [random.uniform(15, 18) for i in x]
# 1.创建画布
plt.figure(figsize=(20, 8), dpi=100)
# 2.绘制图像
plt.plot(x, y_shanghai)
# 2.1 添加x,y轴刻度
# 构造x,y轴刻度标签
x_ticks_label = ["11点{}分".format(i) for i in x]
y_ticks = range(40)
# 刻度显示
plt.xticks(x[::5], x_ticks_label[::5])
plt.yticks(y_ticks[::5])
# 2.2 添加网格显示
plt.grid(True, linestyle="--", alpha=0.5)
# 2.3 添加描述信息
plt.xlabel("时间")
plt.ylabel("温度")
plt.title("中午11点--12点某城市温度变化图", fontsize=20)
# 2.4 图像保存
plt.savefig("./test.png")
# 3.图像显示
plt.show()
2、在同一个坐标系中多次绘制

需求:再添加一个城市的温度变化。 收集到北京当天温度变化情况,温度在1度到3度。怎么去添加另一个在同一坐标系当中的不同图形,其实很简单只需要再次plot即可,但是需要区分线条,如下显示:

ini 复制代码
# 增加北京的温度数据
y_beijing = [random.uniform(5, 8) for i in x]
# 绘制折线图
plt.plot(x, y_shanghai)
# 使用多次plot可以画多个折线
plt.plot(x, y_beijing, color='r', linestyle='--')
3、图形风格
颜色字符 线条风格字符
r 红色 - 实线
g 绿色 - - 虚线
b 蓝色 -. 点划线
w 白色 : 点虚线
c 青色 ' ' 留空、空格
m 洋红
y 黄色
k 黑色

图例的显示位置: plt.legend(loc="best" 或 loc=0) :

Location String Location Code
'best' 0
'upper right' 1
'upper left' 2
'lower left' 3
'lower right' 4
'right' 5
'center left' 6
'center right' 7
'lower center' 8
'upper center' 9
'center' 10
4、绘制子图

一个绘图对象可以包含多个轴,在matplotlib中用轴表示一个绘图区域,可以将其理解为子图。不特别指定,绘图对象只包括一个轴,因此只显示了一个轴(子图Axes)。

可以使用fig对象的add_subplot方法和plt.subplot方法绘制多个轴的图表。

ini 复制代码
import matplotlib.pyplot as plt
from pylab import mpl
import numpy as np
mpl.rcParams["font.sans-serif"] = ["SimHei"]
mpl.rcParams["axes.unicode_minus"] = False
x = np.linspace(0, 10, 100)   # 0到10之间的所有数据,分成100个组
y = np.sin(x)
z = np.cos(x**2)
# 生成默认的画布,并利用该画布生成两个子图
fig = plt.figure(figsize=(8,4), dpi=100)
fig.add_subplot(2,1,1)     # 三个参数分别代表:2行,1列,第1个子图
# 在第一个子图上进行绘制
plt.title('正弦信号')
plt.xlabel('时间')
plt.ylabel('电压')
plt.xlim(-1, 11)
plt.ylim(-1.2, 1.2)
plt.xticks(np.arange(0, 11, 2))
plt.yticks([-1, -0.5, 0, 0.5, 1])
plt.plot(x, y, label='sin(x)')
plt.legend(loc=0)
plt.subplots_adjust(wspace=0, hspace=0.7)    # 调整子图之间的距离
# 第二个子图
fig.add_subplot(2,1,2)   # 创建第二个子图
plt.title('余弦信号')
plt.xlabel('时间')
plt.ylabel('电压')
plt.xlim(-1, 11)
plt.ylim(-1.2, 1.2)
plt.xticks(np.arange(0, 11, 2))
plt.yticks([-1, -0.5, 0, 0.5, 1])
plt.plot(x, z, 'm--', label='cos(x)')
plt.legend(loc=0)
plt.show()
5、添加说明和注释

添加文字说明主要用到方法text,注释可以使用annotate方法。

ini 复制代码
import matplotlib.pyplot as plt
from pylab import mpl
import numpy as np
mpl.rcParams["font.sans-serif"] = ["SimHei"]
mpl.rcParams["axes.unicode_minus"] = False
x = np.linspace(0, 10, 100)   # 0到10之间的所有数据,分成100个组
y = np.sin(x)
z = np.cos(x)
# 绘图设置
plt.figure(figsize=(8, 5), dpi=100)  # 宽度和高度(英寸),dpi,每英寸像素值
plt.title('正余弦信号', color='red', fontsize=20, rotation=0, alpha=1)  # 添加标题,rotation角度旋转,alpha透明度
plt.xlabel('时间', fontsize=15, color='k', rotation=0)   ## 设置x和y轴的名称
plt.ylabel('电压', fontsize=15)
plt.xlim(-1, 11)         # 设置x和y轴的范围
plt.ylim(-1.2, 1.2)
plt.xticks(np.arange(0, 12, 2), fontsize=15, rotation=0)      # 设置x和y周的刻度
plt.yticks([-1, -0.5, 0, 0.5, 1])
plt.plot(x, y, color='blue', linewidth=2, label='sin(x)')     # 绘图
plt.plot(x, z, 'r--', label='cos(x)')    # r红色,--表示线型
plt.legend(loc=0)
# 添加文字说明。0,0表示文字的坐标位置
plt.text(0, 0, '零点', fontsize=10, rotation=0, color='r')
# 添加注释。xy指要添加注释的点,xytext是指注释文字的位置,可以自由指定。也可以添加多个注释
plt.annotate('最大值', color='r', xy=(1.87, 1),
             xytext=(2.2, 1.3),
             arrowprops=dict(facecolor='r', edgecolor='b', width=1, headlength=10))
plt.show()
相关推荐
疯狂成瘾者31 分钟前
语义分块提升RAG检索精度
python
小陈工2 小时前
Python Web开发入门(十七):Vue.js与Python后端集成——让前后端真正“握手言和“
开发语言·前端·javascript·数据库·vue.js·人工智能·python
A__tao7 小时前
Elasticsearch Mapping 一键生成 Java 实体类(支持嵌套 + 自动过滤注释)
java·python·elasticsearch
研究点啥好呢7 小时前
Github热门项目推荐 | 创建你的像素风格!
c++·python·node.js·github·开源软件
迷藏4947 小时前
**发散创新:基于Rust实现的开源合规权限管理框架设计与实践**在现代软件架构中,**权限控制(RBAC)** 已成为保障
java·开发语言·python·rust·开源
明日清晨7 小时前
python扫码登录dy
开发语言·python
bazhange8 小时前
python如何像matlab一样使用向量化替代for循环
开发语言·python·matlab
人工干智能8 小时前
科普:python中你写的模块找不到了——`ModuleNotFoundError`
服务器·python
unicrom_深圳市由你创科技8 小时前
做虚拟示波器这种实时波形显示的上位机,用什么语言?
c++·python·c#
小敬爱吃饭8 小时前
Ragflow Docker部署及问题解决方案(界面为Welcome to nginx,ragflow上传文件失败,Docker中的ragflow-cpu-1一直重启)
人工智能·python·nginx·docker·语言模型·容器·数据挖掘