掌握数据可视化利器,绘制精美图表和函数图形!
一、基础设置与准备
二、统计图表(折线图、条形图、扇形图)
三、一次函数
四、二次函数(含绝对值)
五、反比例函数(含绝对值)
六、幂函数(含绝对值)
七、指数函数(含绝对值)
八、对数函数(含绝对值)
九、三角函数(含绝对值)
十、圆
十一、圆锥曲线(椭圆、双曲线、抛物线)
十二、综合对比图
import matplotlib.pyplot as plt
import numpy as np
# 设置中文显示
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei', 'DejaVu Sans']
plt.rcParams['axes.unicode_minus'] = False
# 创建图形
fig, ax = plt.subplots(figsize=(8, 6))
# 数据
months = ['1月', '2月', '3月', '4月', '5月', '6月']
sales = [120, 135, 98, 142, 168, 185]
# 创建折线图
plt.figure(figsize=(10, 6))
plt.plot(months, sales, marker='o', linestyle='-', color='b', linewidth=2, label='销售额')
plt.plot(months, [x*1.1for x in sales], marker='s', linestyle='--', color='r', label='预测值')
# 添加标题和标签
plt.title('月度销售额趋势图', fontsize=14)
plt.xlabel('月份', fontsize=12)
plt.ylabel('销售额(万元)', fontsize=12)
plt.legend()
plt.grid(True, alpha=0.3)
plt.show()
# 数据
categories = ['语文', '数学', '英语', '物理', '化学']
scores = [85, 92, 88, 78, 80]
# 创建条形图
plt.figure(figsize=(10, 6))
plt.bar(categories, scores, color=['red', 'blue', 'green', 'orange', 'purple'], edgecolor='black')
# 添加数值标签
for i, v in enumerate(scores):
plt.text(i, v + 1, str(v), ha='center', fontsize=12)
plt.title('各科成绩对比', fontsize=14)
plt.xlabel('科目', fontsize=12)
plt.ylabel('分数', fontsize=12)
plt.grid(axis='y', alpha=0.3)
plt.show()
# 数据
labels = ['娱乐', '学习', '运动', '休息', '其他']
time = [3, 4, 1.5, 8, 7.5]
colors = ['#ff9999', '#66b3ff', '#99ff99', '#ffcc99', '#c2c2f0']
# 创建扇形图
plt.figure(figsize=(8, 8))
plt.pie(time, labels=labels, colors=colors, autopct='%1.1f%%',
startangle=90, wedgeprops={'edgecolor': 'white'})
plt.title('每日时间分配', fontsize=14)
plt.axis('equal') # 保持圆形
plt.show()
# y = kx + b
x = np.linspace(-10, 10, 100)
# 不同斜率的一次函数
plt.figure(figsize=(10, 6))
plt.plot(x, 2*x + 3, label='y = 2x + 3', color='red')
plt.plot(x, -1*x + 1, label='y = -x + 1', color='blue')
plt.plot(x, 0.5*x, label='y = 0.5x', color='green')
plt.plot(x, x, label='y = x', color='purple', linestyle='--')
plt.title('一次函数 y = kx + b', fontsize=14)
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.grid(True)
plt.axhline(0, color='black', linewidth=0.5)
plt.axvline(0, color='black', linewidth=0.5)
plt.show()
x = np.linspace(-5, 5, 100)
plt.figure(figsize=(12, 6))
# 普通二次函数
plt.subplot(1, 2, 1)
plt.plot(x, x**2, label='y = x²', color='blue')
plt.plot(x, x**2 - 3, label='y = x² - 3', color='red')
plt.plot(x, (x-2)**2, label='y = (x-2)²', color='green')
plt.title('二次函数', fontsize=14)
plt.legend()
plt.grid(True)
plt.axhline(0, color='black', linewidth=0.5)
plt.axvline(0, color='black', linewidth=0.5)
# 带绝对值的二次函数
plt.subplot(1, 2, 2)
plt.plot(x, abs(x**2 - 4), label='y = |x² - 4|', color='purple')
plt.plot(x, (abs(x))**2, label='y = |x|²', color='orange')
plt.plot(x, abs(x)**2 - 2*abs(x) + 1, label='y = |x|² - 2|x| + 1', color='cyan')
plt.title('带绝对值的二次函数', fontsize=14)
plt.legend()
plt.grid(True)
plt.axhline(0, color='black', linewidth=0.5)
plt.axvline(0, color='black', linewidth=0.5)
plt.tight_layout()
plt.show()
x = np.linspace(-10, 10, 400)
x = x[x != 0] # 排除x=0
plt.figure(figsize=(12, 6))
# 普通反比例函数
plt.subplot(1, 2, 1)
plt.plot(x, 1/x, label='y = 1/x', color='blue')
plt.plot(x, 2/x, label='y = 2/x', color='red')
plt.plot(x, -1/x, label='y = -1/x', color='green')
plt.title('反比例函数', fontsize=14)
plt.legend()
plt.grid(True)
plt.axhline(0, color='black', linewidth=0.5)
plt.axvline(0, color='black', linewidth=0.5)
plt.xlim(-10, 10)
plt.ylim(-10, 10)
# 带绝对值的反比例函数
plt.subplot(1, 2, 2)
plt.plot(x, 1/abs(x), label='y = 1/|x|', color='purple')
plt.plot(x, abs(1/x), label='y = |1/x|', color='orange')
plt.plot(x, -1/abs(x), label='y = -1/|x|', color='cyan')
plt.title('带绝对值的反比例函数', fontsize=14)
plt.legend()
plt.grid(True)
plt.axhline(0, color='black', linewidth=0.5)
plt.axvline(0, color='black', linewidth=0.5)
plt.xlim(-10, 10)
plt.ylim(-10, 10)
plt.tight_layout()
plt.show()
x = np.linspace(-5, 5, 200)
plt.figure(figsize=(12, 6))
# 普通幂函数
plt.subplot(1, 2, 1)
plt.plot(x, x**2, label='y = x²', color='red')
plt.plot(x, x**3, label='y = x³', color='blue')
plt.plot(x, x**(1/2), label='y = x^0.5', color='green')
plt.plot(x, x**(-1), label='y = x^(-1)', color='purple')
plt.title('幂函数 y = x^n', fontsize=14)
plt.legend()
plt.grid(True)
plt.axhline(0, color='black', linewidth=0.5)
plt.axvline(0, color='black', linewidth=0.5)
plt.ylim(-10, 10)
# 带绝对值的幂函数
plt.subplot(1, 2, 2)
plt.plot(x, abs(x)**2, label='y = |x|²', color='red')
plt.plot(x, abs(x)**3, label='y = |x|³', color='blue')
plt.plot(x, abs(x)**(1/2), label='y = |x|^0.5', color='green')
plt.plot(x, abs(x)**(-1), label='y = |x|^(-1)', color='purple')
plt.title('带绝对值的幂函数', fontsize=14)
plt.legend()
plt.grid(True)
plt.axhline(0, color='black', linewidth=0.5)
plt.axvline(0, color='black', linewidth=0.5)
plt.ylim(-10, 10)
plt.tight_layout()
plt.show()
x = np.linspace(-5, 5, 200)
plt.figure(figsize=(12, 6))
# 普通指数函数
plt.subplot(1, 2, 1)
plt.plot(x, np.exp(x), label='y = e^x', color='blue')
plt.plot(x, 2**x, label='y = 2^x', color='red')
plt.plot(x, 0.5**x, label='y = (1/2)^x', color='green')
plt.title('指数函数 y = a^x', fontsize=14)
plt.legend()
plt.grid(True)
plt.axhline(0, color='black', linewidth=0.5)
plt.axvline(0, color='black', linewidth=0.5)
plt.ylim(-2, 10)
# 带绝对值的指数函数
plt.subplot(1, 2, 2)
plt.plot(x, np.exp(abs(x)), label='y = e^|x|', color='purple')
plt.plot(x, 2**abs(x), label='y = 2^|x|', color='orange')
plt.plot(x, abs(np.exp(x)), label='y = |e^x|', color='cyan')
plt.title('带绝对值的指数函数', fontsize=14)
plt.legend()
plt.grid(True)
plt.axhline(0, color='black', linewidth=0.5)
plt.axvline(0, color='black', linewidth=0.5)
plt.ylim(-2, 10)
plt.tight_layout()
plt.show()
x = np.linspace(0.01, 10, 200)
plt.figure(figsize=(12, 6))
# 普通对数函数
plt.subplot(1, 2, 1)
plt.plot(x, np.log(x), label='y = ln x', color='blue')
plt.plot(x, np.log2(x), label='y = log₂ x', color='red')
plt.plot(x, np.log10(x), label='y = log₁₀ x', color='green')
plt.title('对数函数 y = log_a x', fontsize=14)
plt.legend()
plt.grid(True)
plt.axhline(0, color='black', linewidth=0.5)
plt.axvline(0, color='black', linewidth=0.5)
# 带绝对值的对数函数
plt.subplot(1, 2, 2)
x_full = np.linspace(-10, 10, 400)
x_full = x_full[x_full != 0]
plt.plot(x_full, np.log(abs(x_full)), label='y = ln|x|', color='purple')
plt.plot(x_full, np.log2(abs(x_full)), label='y = log₂|x|', color='orange')
plt.plot(x, abs(np.log(x)), label='y = |ln x|', color='cyan')
plt.title('带绝对值的对数函数', fontsize=14)
plt.legend()
plt.grid(True)
plt.axhline(0, color='black', linewidth=0.5)
plt.axvline(0, color='black', linewidth=0.5)
plt.ylim(-5, 5)
plt.tight_layout()
plt.show()
x = np.linspace(-2*np.pi, 2*np.pi, 200)
plt.figure(figsize=(12, 8))
# 普通三角函数
plt.subplot(2, 2, 1)
plt.plot(x, np.sin(x), label='y = sin x', color='red')
plt.title('正弦函数', fontsize=12)
plt.legend()
plt.grid(True)
plt.axhline(0, color='black', linewidth=0.5)
plt.axvline(0, color='black', linewidth=0.5)
plt.subplot(2, 2, 2)
plt.plot(x, np.cos(x), label='y = cos x', color='blue')
plt.title('余弦函数', fontsize=12)
plt.legend()
plt.grid(True)
plt.axhline(0, color='black', linewidth=0.5)
plt.axvline(0, color='black', linewidth=0.5)
plt.subplot(2, 2, 3)
x_tan = np.linspace(-1.5*np.pi, 1.5*np.pi, 200)
x_tan = x_tan[np.abs(x_tan % np.pi) > 0.1]
plt.plot(x_tan, np.tan(x_tan), label='y = tan x', color='green')
plt.title('正切函数', fontsize=12)
plt.legend()
plt.grid(True)
plt.axhline(0, color='black', linewidth=0.5)
plt.axvline(0, color='black', linewidth=0.5)
plt.ylim(-10, 10)
# 带绝对值的三角函数
plt.subplot(2, 2, 4)
plt.plot(x, abs(np.sin(x)), label='y = |sin x|', color='purple')
plt.plot(x, abs(np.cos(x)), label='y = |cos x|', color='orange')
plt.plot(x, np.sin(abs(x)), label='y = sin|x|', color='cyan')
plt.title('带绝对值的三角函数', fontsize=12)
plt.legend()
plt.grid(True)
plt.axhline(0, color='black', linewidth=0.5)
plt.axvline(0, color='black', linewidth=0.5)
plt.tight_layout()
plt.show()
# 参数方程画圆
theta = np.linspace(0, 2*np.pi, 200)
radius = 3
center_x, center_y = 0, 0
x = center_x + radius * np.cos(theta)
y = center_y + radius * np.sin(theta)
plt.figure(figsize=(8, 8))
plt.plot(x, y, label=f'圆: (x-{center_x})² + (y-{center_y})² = {radius}²', color='blue')
# 绘制圆心
plt.scatter(center_x, center_y, color='red', zorder=5)
plt.text(center_x+0.2, center_y+0.2, '圆心', fontsize=12)
plt.title('圆的方程', fontsize=14)
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.grid(True)
plt.axhline(0, color='black', linewidth=0.5)
plt.axvline(0, color='black', linewidth=0.5)
plt.axis('equal')
plt.show()
plt.figure(figsize=(15, 5))
# 椭圆
plt.subplot(1, 3, 1)
theta = np.linspace(0, 2*np.pi, 200)
a, b = 3, 2
x = a * np.cos(theta)
y = b * np.sin(theta)
plt.plot(x, y, label=f'椭圆: x²/{a²} + y²/{b²} = 1', color='red')
plt.title('椭圆', fontsize=14)
plt.legend()
plt.grid(True)
plt.axhline(0, color='black', linewidth=0.5)
plt.axvline(0, color='black', linewidth=0.5)
plt.axis('equal')
# 双曲线
plt.subplot(1, 3, 2)
x_hyper = np.linspace(-10, 10, 400)
x_hyper = x_hyper[np.abs(x_hyper) > 3]
y1 = np.sqrt((x_hyper**2 / 9) - 1)
y2 = -np.sqrt((x_hyper**2 / 9) - 1)
plt.plot(x_hyper, y1, label='双曲线: x²/9 - y² = 1', color='blue')
plt.plot(x_hyper, y2, color='blue')
plt.title('双曲线', fontsize=14)
plt.legend()
plt.grid(True)
plt.axhline(0, color='black', linewidth=0.5)
plt.axvline(0, color='black', linewidth=0.5)
plt.ylim(-10, 10)
# 抛物线
plt.subplot(1, 3, 3)
x_parab = np.linspace(-5, 5, 200)
y_parab = x_parab**2 / 4
plt.plot(x_parab, y_parab, label='抛物线: y = x²/4', color='green')
plt.plot(x_parab, -x_parab**2 / 4, label='抛物线: y = -x²/4', color='purple')
plt.title('抛物线', fontsize=14)
plt.legend()
plt.grid(True)
plt.axhline(0, color='black', linewidth=0.5)
plt.axvline(0, color='black', linewidth=0.5)
plt.tight_layout()
plt.show()
x = np.linspace(-5, 5, 200)
plt.figure(figsize=(12, 8))
# 各种函数对比
plt.plot(x, x, label='一次函数 y=x', color='black', linestyle='--')
plt.plot(x, x**2, label='二次函数 y=x²', color='red')
plt.plot(x, x**3, label='三次函数 y=x³', color='blue')
plt.plot(x, 2**x, label='指数函数 y=2^x', color='green')
plt.plot(x[x>0], np.log(x[x>0]), label='对数函数 y=lnx', color='purple')
plt.plot(x, np.sin(x), label='正弦函数 y=sinx', color='orange')
plt.title('中学常见函数对比', fontsize=14)
plt.xlabel('x')
plt.ylabel('y')
plt.legend(loc='upper left')
plt.grid(True)
plt.axhline(0, color='black', linewidth=0.5)
plt.axvline(0, color='black', linewidth=0.5)
plt.ylim(-10, 10)
plt.show()
plt.plot() | |
plt.bar() | |
plt.pie() | |
plt.scatter() | |
plt.subplot() |
y = kx + b | |
y = ax² + bx + c | |
y = k/x | |
y = x^n | |
y = a^x | |
y = log_a x | |
y = sin x, cos x, tan x | |
💡 学习建议:先掌握基础绘图方法,然后逐步学习添加标题、标签、图例等美化技巧。多练习绘制不同函数图形,理解数学概念与图形的对应关系!
本文所有代码均已测试通过,使用 Python 3.x + Matplotlib 即可运行。