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()
相关推荐
Swift社区1 小时前
在 Swift 中实现字符串分割问题:以字典中的单词构造句子
开发语言·ios·swift
没头脑的ht1 小时前
Swift内存访问冲突
开发语言·ios·swift
没头脑的ht1 小时前
Swift闭包的本质
开发语言·ios·swift
wjs20241 小时前
Swift 数组
开发语言
stm 学习ing2 小时前
FPGA 第十讲 避免latch的产生
c语言·开发语言·单片机·嵌入式硬件·fpga开发·fpga
湫ccc3 小时前
《Python基础》之字符串格式化输出
开发语言·python
mqiqe4 小时前
Python MySQL通过Binlog 获取变更记录 恢复数据
开发语言·python·mysql
AttackingLin4 小时前
2024强网杯--babyheap house of apple2解法
linux·开发语言·python