<think>我们计划编写一个exper4-3.py程序,使用matplotlib和numpy实现图形输出。由于用户没有给出具体的图形要求,我们可以设计一个简单的示例,比如绘制正弦函数和余弦函数的图像。
步骤:
1. 导入必要的库:numpy和matplotlib
2. 使用numpy生成数据(x坐标,以及对应的sin(x)和cos(x))
3. 使用matplotlib绘制图形,并设置标题、坐标轴标签等
4. 显示图形
下面是一个简单的代码示例:
</think># exper4-3.py 程序:使用 Matplotlib 和 NumPy 实现图形输出
下面是完整的 `exper4-3.py` 程序代码,展示了如何使用 Matplotlib 和 NumPy 库生成各种常见图形:
```python
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
# 设置中文字体支持
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
def main():
# 创建数据
x = np.linspace(0, 10, 100)
# 创建图表布局
plt.figure(figsize=(12, 8))
plt.subplots_adjust(hspace=0.4, wspace=0.3)
# 绘制正弦函数图像
plt.subplot(2, 2, 1)
plt.plot(x, np.sin(x), 'r-', linewidth=2)
plt.title('正弦函数')
plt.xlabel('x')
plt.ylabel('sin(x)')
plt.grid(True)
# 绘制余弦函数图像
plt.subplot(2, 2, 2)
plt.plot(x, np.cos(x), 'b--', linewidth=2)
plt.title('余弦函数')
plt.xlabel('x')
plt.ylabel('cos(x)')
plt.grid(True)
# 绘制散点图
plt.subplot(2, 2, 3)
x2 = np.random.rand(50) * 10
y2 = np.random.rand(50) * 10
colors = np.random.rand(50)
sizes = np.random.rand(50) * 100
plt.scatter(x2, y2, c=colors, s=sizes, alpha=0.7, cmap='viridis')
plt.colorbar()
plt.title('随机散点图')
plt.xlabel('X轴')
plt.ylabel('Y轴')
plt.grid(True)
# 绘制柱状图
plt.subplot(2, 2, 4)
labels = ['Python', 'JavaScript', 'C++', 'Java', 'Go']
values = [85, 78, 65, 70, 55]
plt.bar(labels, values, color=['red', 'green', 'blue', 'orange', 'purple'])
plt.title('编程语言受欢迎程度')
plt.xlabel('编程语言')
plt.ylabel('百分比(%)')
# 添加整体标题
plt.suptitle('Matplotlib 和 NumPy 图形展示', fontsize=16)
# 保存图像
plt.savefig('exper4-3_output.png', dpi=300, bbox_inches='tight')
# 显示图表
plt.tight_layout(rect=[0, 0, 1, 0.96]) # 调整布局为整体标题留出空间
plt.show()
# 生成3D曲面图
generate_3d_plot()
def generate_3d_plot():
"""生成三维曲面图"""
fig = plt.figure(figsize=(10, 8))
ax = fig.add_subplot(111, projection='3d')
# 创建数据
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
X, Y = np.meshgrid(x, y)
Z = np.sin(np.sqrt(X**2 + Y**2)) * np.cos(0.5*X)
# 绘制曲面
surf = ax.plot_surface(X, Y, Z, cmap='viridis', edgecolor='none', alpha=0.9)
# 添加标签
ax.set_title('三维曲面: $\sin(\sqrt{x^2 + y^2}) \cdot \cos(0.5x)$')
ax.set_xlabel('X轴')
ax.set_ylabel('Y轴')
ax.set_zlabel('Z轴')
# 添加颜色条
fig.colorbar(surf, shrink=0.5, aspect=5)
# 保存图像
plt.savefig('exper4-3_3d.png', dpi=300)
# 显示图表
plt.tight_layout()
plt.show()
if __name__ == "__main__":
main()
```
## 程序功能说明
### 1. 二维图形展示
- **正弦函数图像**:使用红色实线绘制正弦函数曲线
- **余弦函数图像**:使用蓝色虚线绘制余弦函数曲线
- **散点图**:随机生成带有颜色和大小变化的散点
- **柱状图**:展示不同编程语言的受欢迎程度
### 2. 三维图形展示
- **三维曲面图**:绘制函数 $\sin(\sqrt{x^2 + y^2}) \cdot \cos(0.5x)$ 的三维曲面
- **颜色映射**:使用 'viridis' 颜色映射增强视觉效果
- **交互式视图**:支持旋转和缩放查看不同角度
### 3. 输出选项
- **图像保存**:将生成的图像保存为高分辨率 PNG 文件
- **中文字体支持**:特别配置了中文字体显示支持
- **布局优化**:自动调整子图间距和整体布局
## 运行结果预览
当运行此程序时,会依次显示以下图像:
1. 包含4个子图的综合图表:
- 左上:正弦函数曲线
- 右上:余弦函数曲线
- 左下:随机散点图
- 右下:编程语言柱状图
2. 三维曲面图:
- 展示复杂的数学函数曲面
- 支持交互式旋转查看
## 技术要点
1. **NumPy 数据生成**:
- `np.linspace()` 创建均匀间隔的数值
- `np.random.rand()` 生成随机数
- `np.meshgrid()` 创建网格坐标
2. **Matplotlib 图形绘制**:
- `plt.subplot()` 创建多子图布局
- `plt.plot()` 绘制线性图
- `plt.scatter()` 绘制散点图
- `plt.bar()` 绘制柱状图
- 3D 投影创建三维图形
3. **可视化增强**:
- 颜色映射 (`cmap`)
- 透明度控制 (`alpha`)
- 网格显示 (`grid`)
- 颜色条 (`colorbar`)
4. **中文支持**:
- 配置 matplotlib 使用中文字体
- 确保坐标轴标签和图例正确显示中文
## 使用示例
```bash
# 安装依赖库
pip install numpy matplotlib
# 运行程序
python exper4-3.py
```
程序运行后,会在当前目录生成两个图像文件:
- `exper4-3_output.png`:包含4个子图的综合图表
- `exper4-3_3d.png`:三维曲面图
同时会通过 matplotlib 的交互界面显示这些图表。