湖南大学python头歌实训-matplotlib

这篇博客介绍了使用Python的matplotlib库进行线图、饼图和条形图的制作。内容涵盖线图的创建,包括设定横纵坐标、标题和标注;饼图的制作,展示各部分比例;以及条形图的绘制,用于表示学生成绩。每个图表的制作过程详细解释了所需的关键函数和参数设置。

第1关: 线图的制作

本关任务:寒冷冬天两块不同金属都加热到500度,在空气中放置,温度会不断降低,在接下来的十小时内,现每隔半小时测量一次,测量得到金属块一的温度是500,470,450,400,360,330,310,290,260,240,200,180,150,120,100,80,60,50,40,30,测量得到金属块二的温度是500,440,410,380,360,310,330,295,280,230,200,170,150,120,100,70,50,30,20,10。试画出两块金属时间温度变化图。要求设置横坐标提示为“时间”,纵坐标提示为“温度”,图的标题为“时间温度变化图”,标注分别为“温度一”和“温度二”,显示在“右上角”。金属一用红色点线加圆点绘制,金属二用蓝色虚点线加方块标记绘制,时间是0,0.5,1,1.5,2,2.5,3,3.5,4,4.5,5,5.5,6,6.5,7,7.5,8,8.5,9,9.5。绘制的图形保存到函数中指定的磁盘文件中。
效果图如下:
线图

相关知识
为了完成本关任务,你需要掌握:1.如何导入绘图第三方库,2.如何显示汉字,3.横、纵坐标信息控制,4.标题、标注位置的控制。

导入绘图第三方库
import numpy as np
import matplotlib.pyplot as plt
import matplotlib

显示汉字及负号
matplotlib.rcParams[‘font.family’]=‘simHei’ #显示汉字
plt.rcParams[‘axes.unicode_minus’] = False #显示负号

### 关于Matplotlib数据可视化的Python程序设计实验 在处理有关Matplotlib的数据可视化任务时,了解如何配置环境以及绘制不同类型的图表至关重要。对于给定的任务——创建基于省份GDP数据的条形图,以下是详细的实现方法。 #### 配置中文显示支持 为了确保图形中的文字能够正常显示中文字符,需要设置字体属性: ```python import matplotlib matplotlib.use('Agg') import matplotlib.pyplot as plt # 设置中文字体 plt.rcParams['font.family'] = 'SimHei' plt.rcParams['font.sans-serif'] = ['SimHei'] ``` 这段代码设置了全局字体为黑体(`SimHei`),从而解决了中文乱码问题[^2]。 #### 加载并预处理数据 使用Pandas读取Excel文件,并按年份分组计算总和: ```python import pandas as pd data = pd.read_excel("test/各省GDP.xlsx", dtype={"年份": str}) grouped_data = data.groupby(["年份"])["GDP"].sum() years = grouped_data.index.tolist() total_gdp = grouped_data.values.tolist() ``` 这里`pd.read_excel()`函数用于加载Excel表格,而`groupby().sum()`则实现了按照指定列聚合求和的功能。 #### 绘制条形图 接下来定义画布大小并通过`bar()`函数来构建柱状图: ```python plt.figure(figsize=(10, 8)) plt.bar(years, total_gdp) # 添加标题和其他装饰元素 plt.title("各年度全国GDP总量 (单位:亿元)") plt.xlabel("年份") plt.ylabel("GDP总额(亿)") for i in range(len(total_gdp)): plt.text(i, total_gdp[i], f'{int(total_gdp[i]):,}', ha='center', va='bottom') plt.tight_layout() # 将图像保存到本地磁盘上 plt.savefig("output/gdp_bar_chart.png") # 显示图片(如果是在交互环境中) plt.show() ``` 上述脚本不仅完成了基本的条形图绘制工作,还增加了额外的文字标注功能以便更直观地展示数值信息。最后通过调用`savefig()`把生成的结果存储下来。
### Python 鸢尾花分类实验 #### 数据加载与预处理 在进行鸢尾花分类之前,先要加载并理解数据集。Scikit-learn 提供了一个方便的方法来获取内置的鸢尾花数据集: ```python from sklearn import datasets iris = datasets.load_iris() X, y = iris.data, iris.target ``` 为了使特征名称更具可读性,可以重新命名列名[^2]。 #### 划分训练集和测试集 为了评估模型性能,在构建任何机器学习模型前应该将原始数据划分为训练集和测试集: ```python from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42) ``` #### 构建感知机模型 根据给定的任务需求,这里采用感知机作为分类器来进行鸢尾花种类识别工作。下面展示如何创建一个简单的线性分类器——感知机,并对其进行拟合操作: ```python from sklearn.linear_model import Perceptron clf = Perceptron(tol=1e-3, random_state=42) clf.fit(X_train, y_train) print(f"Training set score: {clf.score(X_train, y_train)}") print(f"Test set score: {clf.score(X_test, y_test)}") ``` 上述代码实现了基本的感知机算法应用过程,包括初始化参数、调用`fit()`函数完成训练以及通过`score()`方法计算准确率得分[^1]。 #### 可视化分析 对于二元属性如花瓣长度(Petal.Length) 和 宽度 (Petal.Width),可以通过绘制散点图直观地观察不同类别的分布情况: ```python import matplotlib.pyplot as plt plt.figure(figsize=(8, 6)) for i in range(len(iris.target_names)): idx = y == i plt.scatter(X[idx, 2], X[idx, 3], label=f'{iris.target_names[i]}', alpha=.7, edgecolors='k') plt.xlabel('petal length') plt.ylabel('petal width') plt.legend(loc="best", shadow=False, scatterpoints=1) plt.title("Iris Petals Scatter Plot") plt.show() ``` 此部分有助于更好地理解和解释最终得到的结果[^4]。
### 关于平台上的计算机图形学实验 在平台上,计算机图形学实验通常涉及基础绘图操作、几何变换以及光照模型等内容。以下是针对可能的实验内容提供的一些解答和示例代码。 #### 绘制基本二维图形 绘制简单的二维图形是许多计算机图形学课程的基础部分。可以使用Python中的`matplotlib`库来完成这一任务[^1]: ```python import matplotlib.pyplot as plt # 定义顶点坐标 vertices = [(0, 0), (2, 4), (4, 0)] # 提取x,y坐标 xs, ys = zip(*vertices) plt.plot(xs + (xs[0], ), ys + (ys[0], )) # 连接首尾形成闭合形状 plt.gca().set_aspect('equal', adjustable='box') # 设置比例一致 plt.show() ``` 此代码片段展示了如何通过指定顶点并连接它们来创建一个三角形[^1]。 #### 几何变换实现 对于更复杂的实验需求,比如平移、旋转或缩放等几何变换,则可以通过矩阵运算实现这些功能[^2]: 假设我们有一个表示点(x,y)的向量v=[x y]^T 和相应的变换矩阵M: \[ v' = M \cdot v \] 下面是一个应用旋转变换的例子(角度θ): ```python import numpy as np import math def rotate_point(px, py, angle_degrees): theta = math.radians(angle_degrees) rotation_matrix = np.array([ [np.cos(theta), -np.sin(theta)], [np.sin(theta), np.cos(theta)] ]) point_vector = np.array([[px],[py]]) new_coords = np.dot(rotation_matrix,point_vector).flatten() return tuple(new_coords) original_point = (1, 0) rotated_point = rotate_point(original_point[0], original_point[1], 90) print(rotated_point) # 输出应接近(-0.0, 1.0),考虑浮点数精度误差 ``` 这里定义了一个函数用于计算给定点绕原点逆时针方向旋转后的坐标位置[^2]。 #### 光照效果模拟 如果涉及到三维建模或者渲染方面的练习,那么学习如何处理光源及其影响是非常重要的一步。OpenGL 是一种广泛使用的标准API,在教学环境中也经常被采用来进行此类演示[^3]。 简单起见,我们可以利用Pygame配合其扩展模块pygame-glext 来快速搭建环境,并设置一些基础参数如颜色材质属性与灯光位置等等[^4]。 注意实际开发过程中还需要加载纹理映射等功能进一步增强视觉体验效果[^5]。 ---
### 关于支持向量机(SVM)实验的指导 #### 什么是支持向量机? 支持向量机(Support Vector Machine, SVM)是一种基于统计学习理论的监督学习方法,主要用于解决二分类问题。它通过最大化分类间隔来实现数据的最佳划分,从而具备良好的泛化性能[^1]。 #### SVM 的核心思想 SVM 的目标是在特征空间中找到一个最优超平面,使得不同类别的样本能够被该超平面尽可能清晰地区分开来。这个过程涉及以下几个关键概念: - **最大间隔分离**:通过优化目标函数,在训练集中找到使两类样本之间的距离最大的分隔面。 - **核技巧**:当数据不是线性可分时,可以通过映射到高维空间使其变得线性可分,并利用核函数简化计算复杂度。 #### Python 中实现 SVM 的代码示例 以下是使用 `scikit-learn` 库完成的一个简单 SVM 分类任务: ```python from sklearn import datasets from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.svm import SVC import matplotlib.pyplot as plt import numpy as np # 加载鸢尾花数据集 iris = datasets.load_iris() X = iris.data[:, :2] # 只取前两个特征以便可视化 y = iris.target # 数据标准化处理 scaler = StandardScaler() X_scaled = scaler.fit_transform(X) # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split( X_scaled, y, test_size=0.3, random_state=42 ) # 创建并训练 SVM 模型 svm_model = SVC(kernel='linear', C=1.0, random_state=42) svm_model.fit(X_train, y_train) # 预测结果 predictions = svm_model.predict(X_test) # 绘制决策边界 def plot_decision_boundary(model, X, y): h = .02 x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1 y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1 xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h)) Z = model.predict(np.c_[xx.ravel(), yy.ravel()]) Z = Z.reshape(xx.shape) plt.contourf(xx, yy, Z, alpha=0.8, cmap=plt.cm.Paired) plt.scatter(X[:, 0], X[:, 1], c=y, edgecolors='k') plt.xlabel('Feature 1') plt.ylabel('Feature 2') plt.title('SVM Decision Boundary') plot_decision_boundary(svm_model, X_train, y_train) plt.show() ``` 上述代码展示了如何加载数据、预处理以及构建 SVM 模型的过程。同时提供了绘制决策边界的工具函数以帮助理解模型的工作机制。 #### 平台上的 SVM 实验建议 如果计划在平台上开展 SVM 相关实验,则需注意以下几点: - 熟悉所给定的数据集及其特点; - 掌握如何调整参数如正则项系数 \(C\) 和选择合适的核函数 (e.g., linear, rbf); - 尝试不同的数据分割比例观察对最终效果的影响; #### 总结 通过对 SVM 原理的学习与实际操作练习,可以加深对其工作方式的理解。借助像 scikit-learn 这样的强大库,快速搭建原型成为可能[^2]。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

勤奋努力的野指针

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值