在之前的学习中,我们学习了如何使用 pandas 将 csv 数据导入到 Dataframe 中。在上一节课,我们还学习了使用 scipy 进行线性回归分析。那么这一周,小亚老师讲带大家使用两个不同的库(matplotlib.pyplot 和 seaborn)来创建数据的线性回归图。
开始之前,我们先回顾一下,上一课的数据和线性回归分析。
.webp)
Matplotlib.pyplot
接下来我们将使用 Matplotlib.pyplot,Matplotlib 是一个支持 Python 中的静态、动画和交互式数据可视化的库。Matplotlib 与 numpy 一起使用做出图的风格一般称为 MATLAB 风格。大家可以使用 matplotlib 创建并完整注释高分辨率、出版质量的绘图,这些绘图可以轻松导出以包含在报告和文章中。可以在 matplotlib 中创建多种图形格式。
我们今天将使用 matplotlib 函数的一个子集,称为 pyplot。这种方法类似于使用 scipy 中函数的 stats 子集。这个库包含用于绘制和注释数据的工具。让我们从蛋白质校准曲线数据的简单 x-y 散点图开始。首先,我们需要导入库,设置图形的大小并指示绘图的数据。
import numpy as npimport matplotlib.pyplot as pltplt.figure(figsize = (10,6)) # 设置图形的大小plt.scatter(xdata, ydata) # 数据的散点图
接下来,我们可以使用 scipy 的 stats.linregress 函数生成的斜率和截距添加最佳拟合线。
plt.plot(xdata, slope * xdata + intercept)然后我们将使用 matplotlib.pyplot 的函数为每个轴添加标签。我们使用 LaTeX 可以在 matplotlib 图形标签中包含下标和希腊字母。
plt.figure(figsize = (10,6))plt.scatter(xdata, ydata)plt.plot(xdata, slope * xdata + intercept)plt.xlabel('Protein Concentration (mg/mL)')plt.ylabel('$A_{595}$')plt.annotate(F'y = {slope:.4f} * x + {intercept:.4f}', xy = (0.25, 1.0))
在这段代码中,大家看到很多奇怪的符号,这些符号是为了希腊字母的顺利展示,以美元符号开始代表特殊符号输入,用反斜杠中添加字体样式,输入希腊字母的英文名称,最后以美元符号结束:$\backslash$mu$
比如我们输入 $\backslash$alpha 显示为 α,我们输入 $\backslash$mu 显示为 μ
打印直线方程的命令包括F,它代表格式化字符串文字。通过使用 F,可以通过将变量名称括在大括号 {} 中来提取使用 scipy.stats 生成的斜率和截距值。还可以通过在变量名称后添加 :.4f 来设置精度,其中 4 是要显示的小数位数,f 表示数据类型 float。
目前使用上面的这几个特殊就可以生成很漂亮的图片了。
.webp)
有些时候,我们在交图片的时候往往出现分辨率不高的情况,这个问题其实很好解决,我们只需要添加一行代码:
plt.savefig('Bradford_plot.png', dpi = 600, bbox_inches = 'tight')当大家执行这个代码的时候,可以发现在本地文件夹中就会生成名称为Bradford_plot.png的图片。
嗯,图片很好,怎么样可以让图片更炫酷呢?
这就需要介绍一下Seaborn了,Seaborn是在 Matplotlib 之上构建的高级库,专注于数据可视化的统计图表。它提供了美观的默认样式和颜色调色板,适合快速生成出版级图表。今天我们将使用 Seaborn 库创建包含置信区间的散点图。各位小伙伴需要注意哦,因为 Seaborn 依赖于其他库(numpy、scipy、pandas 和 matplotlib),因此必须先导入这些库,然后才能使用 Seaborn。
大家可以输入一下下面的代码,看看这个图有什么区别?
import osimport pandas as pdprotein_file = os.path.join('data', 'protein_assay.csv')results_df = pd.read_csv(protein_file)xdata = results_df['Protein Concentration (mg/mL)']ydata = results_df['A595']from scipy import statsslope, intercept, r_value, p_value, std_err = stats.linregress(xdata, ydata)import seaborn as snssns.regplot(x = xdata, y = ydata)
与上面的简单线性回归相比,它通过显示 95% 置信区间使校准曲线的可靠区域更加明显。它还强调了基于该图的计算的有效范围 - 我们不能使用该曲线来分析低于 0.285 或高于 1.118 的吸光度值。
我们来逐步看下:
01
os:用于操作系统相关的功能,比如文件路径的操作。
pandas:用于数据操作和分析,尤其是表格数据。
02
os.path.join('data', 'protein_assay.csv'):通过连接目录名和文件名,生成文件的完整路径。
pd.read_csv(protein_file):读取CSV文件,返回一个DataFrame对象 results_df,其中包含蛋白质测定数据。
03
results_df['Protein Concentration (mg/mL)']:从DataFrame中提取蛋白质浓度的数据,赋值给 xdata。
results_df['A595']:从DataFrame中提取在595nm处的吸光度数据,赋值给 ydata。
04
from scipy import stats:导入 scipy 库中的 stats 模块。
stats.linregress(xdata, ydata):执行线性回归,计算斜率 (slope)、截距 (intercept)、相关系数 (r_value)、p值 (p_value) 和标准误差 (std_err)。
05
import seaborn as sns:导入Seaborn库,用于数据可视化。
sns.regplot(x = xdata, y = ydata):绘制散点图和线性回归线,其中x轴为蛋白质浓度,y轴为吸光度。
我们再换一个文件试试,在文件夹中有protein_assay2的一个表,大家可以尝试画图。
protein_file2 = os.path.join('data', 'protein_assay2.csv')results_df = pd.read_csv(protein_file2)xdata = results_df['mg/mL']ydata = results_df['A595']plt.figure(figsize = (15, 8))from scipy import statsslope, intercept, r_value, p_value, std_err = stats.linregress(xdata, ydata)import seaborn as snssns.regplot(x = xdata, y = ydata)plt.xlabel('Protein Concentration (mg/mL)')plt.ylabel('$A_{595}$')plt.annotate(F'y = {slope:.4f} * x + {intercept:.4f}', xy = (0.2, 0.5))plt.savefig('Bradford_plot2.png', dpi = 600, bbox_inches = ‘tight')
可以运行上面的代码,就可以在本地文件夹中得到高清图片




沪公网安备 31011002003500