Python可视化绘图基础

Python绘图基础

【代码框2-19】------matplotlib绘图的一些基本操作

python 复制代码
# 图2-2的绘制代码
# 导入相关模块
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = 'SimHei'      # 显示中文
plt.rcParams['axes.unicode_minus']=False        # 显示负号

# 生成绘图数据
np.random.seed(2025)                           # 设置随机数种子
x = np.random.standard_normal(200)             # 生成200个标准正态分布随机数
y = 1 + 2 * x + np.random.normal(0, 1, 200)    # 生成变量y的随机数

# 绘制图像内容
plt.figure(figsize=(8, 6))                     # 设置图形大小(长度和高度)
plt.scatter(x, y, marker='o',color='white',edgecolors='blue') 
                                               # 绘制散点图,设置c=''可绘制空心

fit = np.poly1d(np.polyfit(x, y, deg=1))       # 使用一项式拟合
y_hat = fit(x)                                 # 得到拟合y值
plt.plot(x, y_hat, c='r')                      # 绘制拟合直线,设置为红色
plt.plot(x.mean(), y.mean(), 'ro', markersize=20, fillstyle='bottom')
                                         # 添加均值点并设置点的大小、颜色和填充类型
plt.axhline(y.mean(), color='black', ls='-.', lw=1)          # 添加y的均值水平线
plt.axvline(x.mean(), color='black', ls=(0, (5, 10)),lw=1)   # 添加x的均值垂直线

# 绘制其他组件
plt.grid(linestyle=':')                  # 添加网格线

ax = plt.gca()                           # 得到当前操作的图像
ax.spines['right'].set_color('green')    # 设置边框颜色
ax.spines['left'].set_color('#4169E1')
ax.spines['top'].set_color('royalblue')
ax.spines['bottom'].set_color('b')

plt.text(x=0.4, y=-2, s=r'$\hat{y}=\hat{\beta}_0+\hat{\beta}_1x$',
         fontdict={'size':12, 'bbox':{'fc': 'pink', 'boxstyle': 'round'}}, ha='left')  
                                                             # 添加文本注释

plt.annotate(text=r'均值点', xy=(x.mean(), y.mean()), xytext=(-0.6, 3),
         arrowprops = {'headwidth': 10, 'headlength': 12, 'width': 2,
                       'facecolor': 'r', 'shrink': 0.1,},fontsize=14, 
                       color='red', ha='right')               # 添加带箭头的文本注释

plt.title('散点图及拟合直线\n并为图形增加新的元素', fontsize=14) # 添加标题,\n表示换行
plt.xlabel('x = 自变量', fontsize=12)   # 添加x轴标题
plt.ylabel('y = 因变量', fontsize=12)   # 添加y轴标题
plt.legend(['拟合直线'], loc='best',fontsize=10)  # 添加图例

plt.show()                                        # 显示图像

【代码框2-20】------图形布局

python 复制代码
# 使用subplots函数等分布局(见图2-3)
import matplotlib.pyplot as plt
import numpy as np

np.random.seed(1010)   # 数值随机数种子
plt.subplots(nrows=2, ncols=2, figsize=(7, 5))# 生成2x2网格,整幅图形宽度为8,高度为6

plt.subplot(221)        # 在2x2网格的第1个位置绘图
plt.scatter(x=range(50), y=np.random.randint(low=0, high=100, size=50), 
            marker='*', c='red')       # 绘制散点图
plt.title('subplot(221)')              # 绘制标题 

plt.subplot(222)        # 在2x2网格的第2个位置绘图
plt.plot(range(20), np.random.normal(5,10,20), marker='o', 
         linestyle='-.', linewidth=2, markersize=5)    # 绘制折线图
plt.title('subplot(222)')

plt.subplot(223)        # 在2x2网格的第3个位置绘图
plt.bar(x=range(5), height=range(5, 0, -1), color=['cyan', 'pink'])  # 绘制条形图
plt.title('subplot(223)')

plt.subplot(224)        # 在2x2网格的第4个位置绘图
plt.hist(np.random.normal(loc=50, scale=10, size=500), 
         bins=10, color='lightgreen')  # 绘制直方图
plt.title('subplot(224)')

plt.tight_layout()     # 紧凑布局

# 使用plt.savefig('./图2-3 subplots函数的布局.jpg') 可保存图片
python 复制代码
# 使用GridSpec函数自定义布局(见图2-4)
import matplotlib.pyplot as plt

fig = plt.figure(figsize=(6, 5))   # 创建新图形,并设置图形大小
grid=plt.GridSpec(3,3)             # 生成3行3列的网格
plt.subplot(grid[0,:2])            # 占据第1行前2列
plt.subplot(grid[0,2])             # 占据第1行第3列
plt.subplot(grid[1,:1])            # 占据第2行第1列
plt.subplot(grid[1,1:])            # 占据第2行后2列
plt.subplot(grid[2,:3])            # 占据第3行前3列

fig.tight_layout()                 # 紧凑布局
python 复制代码
# 使用add_gridspec函数布局(见图2-5)
import matplotlib.pyplot as plt
import numpy as np

np.random.seed(1010)
fig = plt.figure(figsize=(7, 4))
spec = fig.add_gridspec(nrows=2, ncols=6,width_ratios=[1,1,1,1,1,1], height_ratios=[1,2])
fig.add_subplot(spec[0, 1:3])       # 占据第1行的2~3列
fig.add_subplot(spec[0, 3:])        # 占据第1行的后3列
ax = fig.add_subplot(spec[:, 0])     # 占据第1列
ax = fig.add_subplot(spec[1, 1:4])   # 占据第2行的2~4列
ax = fig.add_subplot(spec[1, 4:])    # 占据第2行第4列后的所有列(这里为5~6列)
fig.tight_layout()
相关推荐
晴天のVlog几秒前
Fastapi使用MongoDB作为数据库
数据库·python·mongodb·fastapi
爱编程— 的小李1 分钟前
结构体(c语言)
c语言·开发语言
向上的车轮6 分钟前
ODOO学习笔记(8):模块化架构的优势
笔记·python·学习·架构
醒着的睡着的人9 分钟前
Python---re模块(正则表达式)
python·正则表达式
chusheng184013 分钟前
Python 正则表达式进阶用法:量词与范围
python·mysql·正则表达式
fathing14 分钟前
c# 调用c++ 的dll 出现找不到函数入口点
开发语言·c++·c#
殷丿grd_志鹏15 分钟前
Python爬虫知识体系-----正则表达式-----持续更新
爬虫·python·正则表达式
前端青山35 分钟前
webpack指南
开发语言·前端·javascript·webpack·前端框架
hummhumm39 分钟前
第 10 章 - Go语言字符串操作
java·后端·python·sql·算法·golang·database
chusheng184042 分钟前
Python 正则表达式进阶用法:分组与引用详解
数据库·python·正则表达式