专栏:数学建模学习笔记
matplotlib模块依赖于numpy模块和tkinter模块,可以绘制多种形式的图形,包括线图、直方图、饼状图、散点图、误差线图等等。
1.绘制带有中文标签和图例的正弦和余弦曲线
- 使用
numpy
创建自变量数组t
。 - 计算正弦函数值
s
和余弦函数值z
。 - 使用
pylab
绘制正弦和余弦曲线,并设置标签。 - 使用
matplotlib.font_manager
设置中文字体,确保字体文件路径正确。 - 设置x轴和y轴标签,使用中文字体。
- 设置图像标题,使用中文字体。
- 显示图例,使用中文字体。
import numpy as np
import pylab as pl
import matplotlib.font_manager as fm
# 必须使用关键参数fname,必须保证字体文件路径正确
myfont = fm.FontProperties(fname=r'C:WindowsFontsSTKAITI.ttf') #设置字体
t = np.arange(0.0, 2.0*np.pi, 0.01) # 自变量取值范围
s = np.sin(t) # 计算正弦函数值
z = np.cos(t) # 计算余弦函数值
pl.plot(t, s, label='正弦')
pl.plot(t, z, label='余弦')
pl.xlabel('x-变量', fontproperties='STKAITI', fontsize=18) # 设置x标签
pl.ylabel('y-正弦余弦函数值', fontproperties='simhei', fontsize=18)
pl.title('sin-cos函数图像', fontproperties='STLITI', fontsize=24) # 标题
pl.legend(prop=myfont) # 设置图例
pl.show()
2. 绘制散点图
- 使用
numpy
创建数据数组a
和b
。 - 使用
scatter
函数绘制散点图。 - 通过参数修改散点符号、大小、颜色和线宽。
- 生成随机数据,使用
scatter
绘制散点图,设置符号形状、大小和颜色。
import numpy as np
import pylab as pl
a = np.arange(0, 2.0*np.pi, 0.1)
b = np.cos(a)
pl.scatter(a,b)
pl.show()
1.修改散点符号与大小
代码语言:javascript复制#修改散点符号与大小
pl.scatter(a, b, s=20, marker=' ')
pl.show()
2.修改颜色
代码语言:javascript复制# 修改颜色
import matplotlib.pylab as pl
import numpy as np
x = np.random.random(100)
y = np.random.random(100)
pl.scatter(x, y, s=x*500, c=u'r', marker=u'*')
# s指大小,c指颜色,marker指符号形状
pl.show()
3.绘制饼状图
- 使用
numpy
创建数据数组。 - 使用
pie
函数绘制饼状图,设置标签、颜色和百分比格式。 - 使饼状图中的某些部分裂开,设置阴影和开始角度。
- 设置坐标轴刻度和标签。
- 设置坐标轴跨度和纵横比。
import numpy as np
import matplotlib.pyplot as plt
#The slices will be ordered and plotted counter-clockwise.
labels = 'Frogs', 'Hogs', 'Dogs', 'Logs'
colors = ['yellowgreen', 'gold', '#FF0000', 'lightcoral']
explode = (0, 0.1, 0, 0.1) # 使饼状图中第2片和第4片裂开
fig = plt.figure()
ax = fig.gca()
ax.pie(np.random.random(4), explode=explode, labels=labels, colors=colors,
autopct='%1.1f%%', shadow=True, startangle=90,
radius=0.25, center=(0, 0), frame=True) # autopct设置饼内百分比的格式
ax.pie(np.random.random(4), explode=explode, labels=labels, colors=colors,
autopct='%1.1f%%', shadow=True, startangle=45,
radius=0.25, center=(1, 1), frame=True)
ax.pie(np.random.random(4), explode=explode, labels=labels, colors=colors,
autopct='%1.1f%%', shadow=True, startangle=90,
radius=0.25, center=(0, 1), frame=True)
ax.pie(np.random.random(4), explode=explode, labels=labels, colors=colors,
autopct='%1.2f%%', shadow=False, startangle=135,
radius=0.35, center=(1, 0), frame=True)
ax.set_xticks([0, 1]) # 设置坐标轴刻度
ax.set_yticks([0, 1])
ax.set_xticklabels(["Sunny", "Cloudy"]) # 设置坐标轴刻度上的标签
ax.set_yticklabels(["Dry", "Rainy"])
ax.set_xlim((-0.5, 1.5)) # 设置坐标轴跨度
ax.set_ylim((-0.5, 1.5))
ax.set_aspect('equal') # 设置纵横比相等
plt.show()
4.在图例中显示公式
- 使用
numpy
创建自变量数组x
。 - 计算正弦函数值
y
和余弦函数值z
。 - 使用
plot
函数绘制曲线,标签中包含LaTeX公式。 - 设置x轴和y轴标签。
- 设置图像标题。
- 设置y轴范围。
- 显示图例。
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 2*np.pi, 500)
y = np.sin(x)
z = np.cos(x*x)
plt.figure(figsize=(8,4))
# 标签前后加$将使用内嵌的LaTex引擎将其显示为公式
plt.plot(x,y,label='$sin(x)$',color='red',linewidth=2) # 红色,2个像素宽
plt.plot(x,z,'b--',label='$cos(x^2)$') # 蓝色,虚线
plt.xlabel('Time(s)')
plt.ylabel('Volt')
plt.title('Sin and Cos figure using pyplot')
plt.ylim(-1.2,1.2)
plt.legend() # 显示图例
plt.show() # 显示绘图窗口
5.多个图形单独显示
- 使用
numpy
创建自变量数组x
。 - 计算正弦、余弦和其他函数值。
- 创建图形,使用
subplot
函数创建多个子图。 - 在每个子图中绘制曲线,设置颜色和样式。
- 限制y轴范围。
import numpy as np
import matplotlib.pyplot as plt
x= np.linspace(0, 2*np.pi, 500) # 创建自变量数组
y1 = np.sin(x) # 创建函数值数组
y2 = np.cos(x)
y3 = np.sin(x*x)
plt.figure(1) # 创建图形
ax1 = plt.subplot(2,2,1) # 第一行第一列图形
ax2 = plt.subplot(2,2,2) # 第一行第二列图形
ax3 = plt.subplot(212, facecolor='y') # 第二行
plt.sca(ax1) # 选择ax1
plt.plot(x,y1,color='red') # 绘制红色曲线
plt.ylim(-1.2,1.2) # 限制y坐标轴范围
plt.sca(ax2) # 选择ax2
plt.plot(x,y2,'b--') # 绘制蓝色曲线
plt.ylim(-1.2,1.2)
plt.sca(ax3) # 选择ax3
plt.plot(x,y3,'g--')
plt.ylim(-1.2,1.2)
plt.show()
6.绘制有描边和填充效果的柱状图
- 使用
numpy
创建数据数组x
和y
。 - 使用
bar
函数绘制柱状图,设置颜色、透明度、边框颜色和样式、填充效果。 - 为每个柱形添加文本标注。
import numpy as np
import matplotlib.pyplot as plt
#生成测试数据
x = np.linspace(0, 10, 11)
y = 11-x
#绘制柱状图
plt.bar(x, y,
color='#772277', #柱的颜色
alpha=0.8, #透明度
edgecolor='blue', #边框颜色
linestyle='--', #边框样式为虚线
linewidth=1, #边框线宽
hatch='*') #内部使用五角星填充
#为每个柱形添加文本标注
for xx, yy in zip(x,y):
plt.text(xx-0.2, yy 0.1, '-' % yy)
#显示图形
plt.show()
7.使用雷达图展示学生成绩
- 创建包含课程名称和成绩的数组。
- 计算角度数组,均匀分布在圆周上。
- 使用
polar
函数绘制雷达图,设置角度和数据,设置颜色、线型和端点符号。 - 设置角度网格标签,使用中文字体。
- 填充雷达图内部。
import numpy as np
import matplotlib.pyplot as plt
courses = ['C ', 'Python', '高数', '大学英语', '软件工程', '组成原理', '数字图像处理', '计算机图形学']
scores = [80, 95, 78, 85, 45, 65, 80, 60]
dataLength = len(scores) # 数据长度
# angles数组把圆周等分为dataLength份
angles = np.linspace(0, 2 * np.pi, dataLength, endpoint=False)
# 闭合数据
scores.append(scores[0])
angles = np.append(angles, angles[0])
# 绘制雷达图
plt.polar(angles, scores, 'rv--', linewidth=2)
# 设置角度网格标签
plt.thetagrids(angles[:-1] * 180 / np.pi, courses, fontproperties='simhei')
# 填充雷达图内部
plt.fill(angles, scores, facecolor='r', alpha=0.6)
plt.show()
8.绘制三维曲面
- 使用
numpy
创建数据数组x
、y
和z
。 - 使用
mpl_toolkits.mplot3d
中的plot_surface
函数绘制三维曲面。 - 设置坐标轴标签。
import numpy as np
import matplotlib.pyplot as plt
import mpl_toolkits.mplot3d
x,y = np.mgrid[-2:2:20j, -2:2:20j] # 步长使用虚数
# 虚部表示点的个数
# 并且包含end
z = 50 * np.sin(x y) # 测试数据
ax = plt.subplot(111, projection='3d') # 三维图形
ax.plot_surface(x,y,z,rstride=2, cstride=1, cmap=plt.cm.Blues_r)
ax.set_xlabel('X') # 设置坐标轴标签
ax.set_ylabel('Y')
ax.set_zlabel('Z')
plt.show()
代码语言:javascript复制import pylab as pl
import numpy as np
import mpl_toolkits.mplot3d
rho, theta = np.mgrid[0:1:40j, 0:2*np.pi:40j]
z = rho**2
x = rho*np.cos(theta)
y = rho*np.sin(theta)
ax = pl.subplot(111, projection='3d')
ax.plot_surface(x,y,z)
pl.show()
9.绘制三维曲线
- 使用
numpy
创建自变量数组theta
和z
。 - 计算极坐标下的
x
和y
值。 - 使用
mpl_toolkits.mplot3d
中的plot
函数绘制三维曲线。 - 设置图例。
import matplotlib as mpl
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
import matplotlib.pyplot as plt
mpl.rcParams['legend.fontsize'] = 10 # 图例字号
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d') # 三维图形
theta = np.linspace(-4 * np.pi, 4 * np.pi, 100)
z = np.linspace(-4, 4, 100) * 0.3 # 测试数据
r = z**3 1
x = r * np.sin(theta)
y = r * np.cos(theta)
ax.plot(x, y, z, label='parametric curve')
ax.legend()
plt.show()
10.设置图例样式
- 使用
numpy
创建自变量数组t
。 - 计算正弦函数值
s
和余弦函数值z
。 - 使用
plot
函数绘制正弦和余弦曲线。 - 设置图像标题,使用中文字体。
- 使用
legend
函数设置图例字体、标题、位置、背景色、边框颜色和列数。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.font_manager as fm
t = np.arange(0.0, 2*np.pi, 0.01)
s = np.sin(t)
z = np.cos(t)
plt.plot(t, s, label='正弦')
plt.plot(t, z, label='余弦')
plt.title('sin-cos函数图像', #标题文本
fontproperties='STLITI', #标题字体
fontsize=24) #标题字号
myfont = fm.FontProperties(fname=r'C:WindowsFontsSTKAITI.ttf')
plt.legend(prop=myfont, #图例字体
title='Legend', #图例标题
loc='lower left', #图例左下角位于图形(0.43,0.75)的位置
bbox_to_anchor=(0.43,0.75),
shadow=True, #显示阴影
facecolor='yellowgreen', #图例背景色
edgecolor='red', #图例边框颜色
ncol=2, #显示为两列
markerfirst=False) #图例文字在前,符号在后
plt.show()
总结
Matplotlib 是一个强大的 Python 可视化库,广泛应用于绘制各种图形。其基本用法包括导入必要的模块,如 numpy
和 matplotlib.pyplot
,并生成数据进行绘图。例如,可以通过线图、散点图、柱状图和雷达图来展示数据。创建三维图形需要使用 mpl_toolkits.mplot3d
库。使用 matplotlib 进行可视化可以通过简单的代码实现,包括设置标签、图例、颜色和线型等,以生成直观的图表来分析和展示数据。