一、Matplotlib可视化库
1.1 Matplotlib的特点
Matplotlib是一个用于创建静态、动态、交互性可视化图表的开源库,具有如下特点:
- 可以创建2D或3D的图形,包括线性图、条形图、散点图、饼图、直方图等
- 可定制图形的各个属性,包括图形的大小、颜色、线型、标签、注释等
- 支持多种底层绘图库,包括Tkinter、wxPython、Qt、GTK等
1.2 Matplotlib的应用领域
Matplotlib通常被用于数据分析、科学研究、工程设计和教学演示等领域。它可以帮助人们更加清晰直观地展示数据和图形,并从中提取出各种数据特征。
1.3 Matplotlib的安装及插件管理
要安装Matplotlib可以使用pip命令如下所示:
pip install matplotlib
Matplotlib还有许多插件可供选择用于增强图形的质量、交互性、绘制速度等,包括Seaborn、mpld3、ggplot等。您可以使用pip命令来安装这些插件。例如,要安装Seaborn插件,可以运行以下命令:
pip install seaborn
二、Matplotlib可视化库的基础使用
2.1 图形基础结构
2.1.1 Figure对象
Matplotlib的图形基础结构由Figure对象和Axes对象组成。Figure对象表示整个图形的窗口或页面,可以包含多个子图(Axes对象)。要创建Figure对象,可以调用subplots()函数,如下所示:
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
2.1.2 Axes对象
Axes对象表示子图包含一个或多个坐标轴、图形和文本等元素。要创建Axes对象,可以在subplots()函数中指定行数、列数和子图编号,如下所示:
import matplotlib.pyplot as plt
fig, axs = plt.subplots(2, 3) # 创建2x3的子图集合
ax1 = axs[0, 0] # 获取第1个子图
ax2 = axs[0, 1] # 获取第2个子图
ax3 = axs[1, 0] # 获取第3个子图
ax4 = axs[1, 1] # 获取第4个子图
ax5 = axs[1, 2] # 获取第5个子图
2.2 绘制曲线图及散点图
2.2.1 点的标记和线条风格
Matplotlib中可以使用不同的标记和线条风格来绘制散点图和曲线图如下所示:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y = np.sin(x)
fig, ax = plt.subplots()
ax.plot(x, y, 'ro--', label='sin(x)')
ax.legend()
上述代码中用NumPy生成一组x和y值,然后利用plot()函数绘制散点图并指定颜色标记、线条风格和图例标签。另外使用了legend()函数来显示图例。
2.2.2 坐标轴和刻度线
在Matplotlib中可以用xlabel()、ylabel()、title()函数来设置坐标轴和图形标题,用xticks()、yticks()函数来设置坐标轴的刻度线和标签。例如:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
fig, ax = plt.subplots()
ax.plot(x, y1, 'r-', label='sin(x)')
ax.plot(x, y2, 'b-', label='cos(x)')
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_title('Trig Functions')
ax.legend()
上述代码中首先生成了x、y1和y2的值,并用plot()函数绘制了两条不同颜色的曲线。然后使用set_xlabel()、set_ylabel()和set_title()函数设置了坐标轴和图形标题,使用legend()函数显示图例。
以上就是Matplotlib可视化库的基础使用可以使用这些函数和方法来创建各种2D、3D图形,并呈现给用户。
三、Matplotlib可视化库的进阶使用
在这一部分将为大家介绍Matplotlib可视化库的进阶使用方法,包括如何绘制直方图、条形图、饼图、雷达图和3D图形,并且会讲解各种可用参数的含义。
3.1 绘制直方图和条形图
3.1.1 横向直方图和条形图
使用hist()
函数可以非常容易地绘制垂直的直方图和条形图,但是如果需要横向的可以将barh()
函数用在一个横向的子图上来完成横向直方图和条形图的绘制。
import matplotlib.pyplot as plt
import numpy as np
# 随机生成一组数据
x = np.random.randn(1000)
# 创建一个横向子图
fig, ax = plt.subplots()
# 绘制直方图
ax.hist(x, bins=20, orientation='horizontal', color='b')
# 显示图形
plt.show()
上述代码中首先使用NumPy的随机数生成函数生成了一组1000个随机数。然后,我们使用subplots()
函数创建了一个横向的子图,使用hist()
函数并指定bins
参数和orientation='horizontal'
参数来绘制横向直方图,使用color
参数设置直方图的颜色。
3.1.2 堆叠式直方图和条形图
在Matplotlib中可以使用hist()
函数和bar()
函数来绘制简单的直方图和条形图。而当需要显示多组数据的分布时,可以使用堆叠式直方图和条形图来进行比较。我们可以通过设置alpha
参数来控制不同数据组之间的透明度,让图形更加清晰。
import matplotlib.pyplot as plt
import numpy as np
# 随机生成两组数据
x = np.random.randn(1000)
y = np.random.randn(1000)
# 创建一个子图
fig, ax = plt.subplots()
# 绘制直方图
ax.hist([x, y], bins=20, stacked=True, alpha=0.5, label=['x', 'y'])
# 显示图例
ax.legend()
# 显示图形
plt.show()
上述代码中首先生成了两组1000个随机数,并使用subplots()
函数创建了一个子图。然后使用hist()
函数并指定bins
参数、stacked=True
参数、alpha
参数和label
参数来绘制堆叠式直方图,并使用legend()
函数显示图例。
3.2 绘制饼图和雷达图
3.2.1 饼图的绘制方法及参数
在Matplotlib中可以通过pie()
函数绘制饼图。pie()
函数可以接受一个数组参数,表示饼图的每个部分的大小可以使用explode
参数来突出显示某个部分或者多个部分。
import matplotlib.pyplot as plt
import numpy as np
# 创建一个数组
sizes = np.array([50, 25, 15, 10])
# 创建一个标签数组
labels = ['A', 'B', 'C', 'D']
# 突出显示某一部分
explode = [0, 0.1, 0, 0]
# 绘制饼图
plt.pie(sizes, labels=labels, explode=explode, autopct='%1.1f%%', shadow=True, startangle=90)
# 显示图形
plt.show()
上述代码中首先创建了一个大小为4的数组和一个标签数组,并使用explode
参数突出了B部分。然后,我们使用pie()
函数并指定labels
参数、explode
参数、autopct
参数、shadow
参数和startangle
参数来绘制饼图。
3.2.2 雷达图的绘制方法及参数
在Matplotlib中可以使用polar()
函数将矩形坐标轴转换为极坐标轴,从而绘制雷达图。我们可以使用fill()
函数和plot()
函数来填充多边形和绘制线图。
import matplotlib.pyplot as plt
import numpy as np
# 创建一个数组
values = [3, 2, 5, 4, 1]
# 创建一个标签数组
labels = ['A', 'B', 'C', 'D', 'E']
# 计算每一部分的角度
angles = np.linspace(0, 2 * np.pi, len(values), endpoint=False)
# 将360度的角度固定在一个平面上
angles = np.concatenate((angles, [angles[0]]))
# 创建一个子图
fig, ax = plt.subplots(nrows=1, ncols=1, subplot_kw=dict(projection='polar'))
# 绘制多边形
ax.fill(angles, values, 'blue', alpha=0.1)
# 绘制线图
ax.plot(angles, values, 'blue',linewidth=2)
# 设置角度间隔,并标记角度
ax.set_xticks(angles[:-1])
ax.set_xticklabels(labels)
# 设定角度范围
ax.set_ylim(0, 6)
# 显示图形
plt.show()
上述代码中首先创建了一个大小为5的数组和一个标签数组,并使用linspace()
函数和concatenate()
函数计算分成5个部分,在极坐标系中各占$72^{\circ}$。然后,我们使用fill()
函数和plot()
函数来绘制多边形和线图,并指定颜色和透明度。最后使用set_xticks()
函数和set_xticklabels()
函数设置角度间隔和标签,使用set_ylim()
函数设置角度范围。
3.3 绘制3D图形
3.3.1 简单3D图形
在Matplotlib中可以使用mplot3d
模块中的子包Axes3D
来绘制3D图形。我们可以使用scatter()
函数绘制散点图或使用plot_surface()
函数绘制表面图。下面来看一个简单的例子,使用scatter()
函数绘制一个随机的3D散点图。
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
# 随机生成一组数据
n = 100
x = np.random.rand(n)
y = np.random.rand(n)
z = np.random.rand(n)
# 创建一个3D子图
fig = plt.figure()
ax = fig.add_subplot(projection='3d')
# 绘制3D散点图
ax.scatter(x, y, z, c='r', marker='o')
# 显示图形
plt.show()
上述代码中首先使用random.rand()
函数生成了一组100个随机数。然后使用add_subplot()
函数创建了一个3D子图,并指定了projection='3d'
参数。接着我们使用scatter()
函数并指定c
参数和marker
参数来绘制了一个3D散点图。最后使用show()
函数显示图形。
3.3.2 漫游、交互和定制化
在Matplotlib中可以对3D图形进行漫游、交互和定制化来提升可视化效果。下面来看一个例子使用plot_surface()
函数绘制一个多项式表面。
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
# 创建一个3D子图
fig = plt.figure()
ax = fig.add_subplot(projection='3d')
# 定义x和y的取值范围
x = np.outer(np.linspace(-2, 2, 100), np.ones(100))
y = x.copy().T
# 定义z的取值范围
z = x**2 + y**3
# 绘制3D多项式表面
ax.plot_surface(x, y, z, cmap='coolwarm', edgecolor='none')
# 设定坐标轴标签
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
# 添加颜色条
fig.colorbar(ax.plot_surface(x, y, z, cmap='coolwarm', edgecolor='none'))
# 显示图形
plt.show()
上述代码中首先使用add_subplot()
函数创建了一个3D子图。然后,我们使用outer()
函数和copy()
函数定义了x、y、z的取值范围。接着,我们使用plot_surface()
函数绘制了一个多项式表面,并指定了颜色映射和边线颜色。最后,我们使用set_xlabel()
函数、set_ylabel()
函数和set_zlabel()
函数添加坐标轴标签,使用colorbar()
函数添加颜色条。
四、高级应用及优化技巧
在本部分将会向大家介绍 Matplotlib 的高级应用以及一些优化技巧,旨在帮助大家更加灵活高效的使用 Matplotlib。
4.1 Matplotlib 的高级应用
4.1.1 绘制图形的确切位置和尺寸
在 Matplotlib 中可以使用 Figure 对象和 Subplot 对象来控制图形的确切位置和尺寸。
Figure
对象通过设置figsize
参数来控制图形的尺寸,以英寸为单位。Subplot
对象可以用set_position()
方法设置位置和大小。它要求一个矩形的参数,其左下角和右上角的坐标分别像素和串联。
import matplotlib.pyplot as plt
# 创建一个 Figure 对象
fig = plt.figure(figsize=(6, 4))
# 创建一个 Axes 对象
ax = fig.add_subplot(111)
ax.plot([1, 2, 3], [4, 5, 6])
# 设置 Subplot 的位置和大小
ax.set_position([0.1, 0.1, 0.8, 0.8])
# 显示图形
plt.show()
上述代码中首先使用 figure()
函数创建一个 Figure
对象,并指定 figsize
参数为 (6, 4)
,表示图形的尺寸为 6 英寸宽、4 英寸高。接着,我们使用 add_subplot()
方法创建一个坐标系对象,并使用 set_position()
方法设置坐标系的位置和大小。set_position()
方法的四个参数依次为左下角 x 坐标、左下角 y 坐标、矩形宽度和矩形高度。最后使用 show()
函数显示图形。
4.1.2 处理和绘制大数据
当处理和绘制大量的数据时,Matplotlib 可能会变得非常缓慢或者停止响应。为了解决这个问题,我们可以使用以下技巧:
- 分块处理数据。将数据分成一小块一小块的进行处理和绘制,而不是将整个数据集都加载到内存中。
- 减小数据点的数量。使用
sample()
函数减小数据集的大小,或者使用平滑过渡的方法代替点图。 - 使用并行计算。使用多线程技术或者进程池技术等来提升程序的运行速度。
import numpy as np
import matplotlib.pyplot as plt
# 创建一个大数据集
n = 1000000
x = np.random.normal(size=n)
y = np.random.normal(size=n)
# 1. 分块处理数据
k = 1000
for i in range(n // k + 1):
x_chunk = x[i * k: (i + 1) * k]
y_chunk = y[i * k: (i + 1) * k]
plt.scatter(x_chunk, y_chunk, s=1)
# 2. 减小数据点的数量
plt.hist2d(x, y, bins=100, cmap=plt.cm.jet)
# 3. 使用并行计算
from multiprocessing import Pool
with Pool() as p:
result = p.map(compute, data)
上述代码中首先使用 numpy.random.normal()
函数生成一个包含 100 万个随机数的数据集 x
和 y
。我们可以使用 第 1 种方法,将数据分成大小为 1000 的小块,使用 scatter()
函数逐个块绘制散点图;或者使用 第 2 种方法,使用 hist2d()
函数绘制 2D 直方图,来代替点图;或者使用 第 3 种方法,使用多线程处理数据集,来提高程序的运行速度。
4.2 Matplotlib 的优化技巧
4.2.1 使用 subplots()
来优化绘图的排版
在 Matplotlib 中可以使用 subplots()
函数来绘制多个子图,并且可以进行排版。
import numpy as np
import matplotlib.pyplot as plt
# 创建一个大小为 (6, 8) 的 Figure 对象和两个大小为 (2, 2) 的 Subplot 对象
fig, axs = plt.subplots(2, 2, figsize=(6, 8))
# 子图 1
x1 = np.arange(0, 10, 0.1)
y1 = np.sin(x1)
axs[0, 0].plot(x1, y1)
axs[0, 0].set_title('Subplot 1')
# 子图 2
x2 = np.arange(0, 10, 0.1)
y2 = np.cos(x2)
axs[0, 1].plot(x2, y2)
axs[0, 1].set_title('Subplot 2')
# 子图 3
x3 = np.random.normal(size=1000)
y3 = np.random.normal(size=1000)
axs[1, 0].scatter(x3, y3, s=1)
axs[1, 0].set_title('Subplot 3')
# 子图 4
x4 = np.random.gamma(shape=2, size=1000)
axs[1, 1].hist(x4, bins=50)
axs[1, 1].set_title('Subplot 4')
# 调整子图之间的间距
plt.subplots_adjust(hspace=0.3)
# 显示图形
plt.show()
上述代码中首先使用 subplots()
函数创建一个大小为 (6, 8)
的 Figure
对象和两个大小为 (2, 2)
的 Subplot
对象。接着,使用 plot()
、scatter()
和 hist()
函数绘制不同类型的子图,并使用 set_title()
函数为子图添加标题。最后,使用 subplots_adjust()
函数调整子图之间的间距,并使用 show()
函数显示图形。
4.2.2 使用颜色条来展示数据
在 Matplotlib 中可以使用颜色条(colorbar)来展示数据集中数值的大小或者变化趋势。
import numpy as np
import matplotlib.pyplot as plt
# 创建一个大小为 (6, 4) 的 Figure 对象和一个 Subplot 对象
fig, ax = plt.subplots(figsize=(6, 4))
# 生成一个包含 1000 个二维坐标的数据集
x, y = np.random.normal(size=(2, 1000))
# 绘制散点图,并使用颜色条展示数据的分布
sc = ax.scatter(x, y, s=20, c=x, cmap=plt.cm.jet)
fig.colorbar(sc)
# 添加标题和标签
ax.set_title('Scatter Plot with Colorbar')
ax.set_xlabel('X')
ax.set_ylabel('Y')
# 显示图形
plt.show()
上述代码中首先使用 subplots()
函数创建一个大小为 (6, 4)
的 Figure
对象和一个 Subplot
对象。接着,我们使用 numpy.random.normal()
函数生成一个包含 1000 个二维坐标的数据集 x
和 y
,并使用 scatter()
函数绘制散点图,使用 c
参数来指定颜色条的数值。然后,使用 colorbar()
函数添加颜色条,并使用 set_title()
、set_xlabel()
和 set_ylabel()
函数添加标题和标签。最后,使用 show()
函数显示图形。
4.2.3 使用网格线来更好地展示数据
在 Matplotlib 中可以使用网格线来更好地展示数据集中的数据分布和趋势。
import numpy as np
import matplotlib.pyplot as plt
# 创建一个大小为 (6, 4) 的 Figure 对象和一个 Subplot 对象
fig, ax = plt.subplots(figsize=(6, 4))
# 生成一个包含 1000 个正态分布数据的数据集
data = np.random.normal(size=1000)
# 绘制直方图,并使用网格线展示数据的分布
ax.hist(data, bins=50, alpha=0.5, edgecolor='black', linewidth=1.2)
ax.grid(True)
# 添加标题和标签
ax.set_title('Histogram with Grid Lines')
ax.set_xlabel('Value')
ax.set_ylabel('Frequency')
# 显示图形
plt.show()
上述代码中首先使用 subplots()
函数创建一个大小为 (6, 4)
的 Figure
对象和一个 Subplot
对象。接着,生成一个包含 1000 个正态分布数据的数据集 data
,并使用 hist()
函数绘制直方图,使用 alpha
参数来指定透明度,使用 edgecolor
参数和 linewidth
参数来设置边界颜色和宽度。然后,使用 grid()
函数添加网格线,并使用 set_title()
、set_xlabel()
和 set_ylabel()
函数添加标题和标签。最后,使用 show()
函数显示图形。
五、实战案例分析
在本节中将学习如何使用 Python 的可视化库 Matplotlib 打造天气预报图和数据分析图。
5.1 制作天气预报图
5.1.1 导入天气数据
天气预报图通常需要用到历史天气数据,这里我们可以使用 Pandas 库中的 read_csv()
函数导入 CSV 格式的天气数据集。
import pandas as pd
# 读取天气数据集
weather_data = pd.read_csv('weather_data.csv')
# 访问天气数据集中的前五行数据
print(weather_data.head())
上述代码中使用 Pandas 库的 read_csv()
函数读取了一个名为 weather_data.csv
的天气数据集,并使用 head()
函数访问了该数据集的前五行数据。
5.1.2 绘制天气预报图
接下来可以使用 Matplotlib 库中的 plot()
函数和 fill_between()
函数来绘制一张简单的天气预报图。
import matplotlib.pyplot as plt
# 设置图形大小和标题
plt.figure(figsize=(10, 6))
plt.title('Weather Forecast')
# 绘制最高温度和最低温度的曲线
plt.plot(weather_data['date'], weather_data['high_temp'], color='red', label='High Temp')
plt.plot(weather_data['date'], weather_data['low_temp'], color='blue', label='Low Temp')
# 填充最高温度和最低温度曲线之间的区域
plt.fill_between(weather_data['date'], weather_data['high_temp'], weather_data['low_temp'], color='grey', alpha=0.2)
# 设置横轴和纵轴标签
plt.xlabel('Date')
plt.ylabel('Temperature')
# 显示图例
plt.legend()
# 显示图形
plt.show()
上述代码中首先使用 figure()
函数设置了图形的大小和标题。接着,使用 plot()
函数分别绘制了最高温度和最低温度的曲线,并使用 fill_between()
函数为两条曲线之间的区域填充了灰色。然后,使用 xlabel()
函数和 ylabel()
函数设置了横轴和纵轴的标签,并使用 legend()
函数显示了图例。最后,使用 show()
函数显示图形。
5.2 制作数据分析图
5.2.1 导入数据分析数据
数据分析图通常需要用到包含数据分析结果的数据集,这里我们可以使用 Pandas 库中的 read_excel()
函数导入 Excel 格式的数据分析数据集。
import pandas as pd
# 读取数据分析数据集
analysis_data = pd.read_excel('analysis_data.xlsx')
# 访问数据分析数据集中的前五行数据
print(analysis_data.head())
上述代码中使用 Pandas 库的 read_excel()
函数读取了一个名为 analysis_data.xlsx
的数据分析数据集,并使用 head()
函数访问了该数据集的前五行数据。
5.2.2 绘制柱状图、折线图和饼图
接下来可以使用 Matplotlib 库中的 bar()
函数、plot()
函数和 pie()
函数来绘制柱状图、折线图和饼图。
import matplotlib.pyplot as plt
# 设置图形大小和标题
plt.figure(figsize=(10, 6))
plt.suptitle('Data Analysis')
# 绘制柱状图
plt.subplot(1, 2, 1)
plt.bar(analysis_data['name'], analysis_data['value'])
plt.xticks(rotation=45)
# 绘制折线图
plt.subplot(2, 2, 2)
plt.plot(analysis_data['name'], analysis_data['value'], marker='o')
# 绘制饼图
plt.subplot(2, 2, 4)
plt.pie(analysis_data['value'], labels=analysis_data['name'], autopct='%1.1f%%', shadow=True, startangle=90)
# 显示图形
plt.show()
上述代码中使用 figure()
函数设置了图形的大小和总标题。接着使用 subplot()
函数设置了绘制柱状图、折线图和饼图的位置。然后使用 bar()
函数绘制了柱状图,并使用 xticks()
函数旋转了横轴上的标签。使用 plot()
函数绘制了折线图,并使用 marker
参数指定了数据点的样式。最后使用 pie()
函数绘制了饼图,并使用 labels
参数指定了数据块的标签,使用 autopct
参数指定了百分比的格式使用 shadow
参数添加了阴影使用 startangle
参数设置了起始角度。最后使用 show()
函数显示图形。
六、实际应用场景
Python可视化不仅可以用于一般的数据可视化,还可以广泛应用于各种行业和领域,如金融、生命科学等。
6.1 Python可视化在金融行业的应用
6.1.1 绘制K线图
K线图是金融行业常用的一种图表类型,用于展示股票、期货等金融产品的价格变化趋势。在Python中,我们可以使用Matplotlib库中的mpl_finance模块来绘制K线图。
import matplotlib.pyplot as plt
from mpl_finance import candlestick_ohlc
import pandas as pd
import matplotlib.dates as mpl_dates
# 读取股票数据
data = pd.read_csv('stock_data.csv')
# 将日期信息从字符串格式转换为日期格式
data['date'] = pd.to_datetime(data['date'])
data['date'] = data['date'].apply(mpl_dates.date2num)
# 绘制K线图
fig, ax = plt.subplots()
candlestick_ohlc(ax, data.values, width=0.6, colorup='green', colordown='red', alpha=0.8)
plt.xlabel('Date')
plt.ylabel('Price')
plt.title('Stock Price Trend')
plt.xticks(rotation=45)
plt.show()
在上述代码中首先使用Pandas库读取了一个名为 stock_data.csv
的股票数据集,并将其中的日期信息从字符串格式转换为日期格式。然后,使用Matplotlib库中的 candlestick_ohlc
函数绘制了K线图。函数的第一个参数为绘图的坐标轴,第二个参数为绘图数据,第三个参数为每根K线的宽度,第四个参数为上涨时的颜色,第五个参数为下跌时的颜色,第六个参数为透明度。接着,使用xlabel()
函数和ylabel()
函数分别设置横轴和纵轴的标签,使用title()
函数设置图表的标题,使用xticks()
函数旋转了横坐标上的日期标签,最后使用show()
函数显示了图形。
6.1.2 绘制时间序列图
时间序列图是另一种金融领域常用的图表类型,用于显示金融数据随时间变化的趋势。在Python中我们可以使用Pandas库和Matplotlib库来绘制时间序列图。
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
# 读取股票数据
data = pd.read_csv('stock_data.csv')
# 将日期信息从字符串格式转换为日期格式
data['date'] = pd.to_datetime(data['date'])
# 将日期列作为索引
data.set_index('date', inplace=True)
# 绘制时间序列图
fig, ax = plt.subplots()
ax.plot(data.index, data['price'], label='Price')
ax.plot(data.index, data['volume'], label='Volume')
plt.xlabel('Date')
plt.ylabel('Value')
plt.title('Stock Data')
ax.xaxis.set_major_locator(mdates.YearLocator())
ax.xaxis.set_major_formatter(mdates.DateFormatter('%Y'))
plt.legend()
plt.show()
在上述代码中首先使用Pandas库读取了一个名为 stock_data.csv
的股票数据集,并将其中的日期信息从字符串格式转换为日期格式。然后,将日期列作为索引。接着,使用Matplotlib库中的 plot()
函数分别绘制了股票价格和交易量随时间变化的趋势。使用 xlabel()
函数和 ylabel()
函数分别设置横轴和纵轴的标签,使用 title()
函数设置图表的标题,使用 xaxis
对象的 set_major_locator()
方法和 set_major_formatter()
方法来设置横坐标上刻度的位置和格式。最后,使用 legend()
函数显示图例,使用 show()
函数显示了图形。
6.2 Python可视化在生命科学方面的应用
6.2.1 绘制生物信息学图形
Python在生命科学领域也有广泛的应用,可用于绘制各种生物信息学图形,如基因结构图、序列logo图、基因表达谱等。这里我们以基因结构图为例,介绍如何使用BioPython库和Matplotlib库绘制基因结构图。
from Bio import SeqIO
import matplotlib.pyplot as plt
# 读取基因序列
gene = SeqIO.read('gene.fasta', 'fasta')
# 绘制基因结构图
fig, ax = plt.subplots(figsize=(10, 5))
for index, feature in enumerate(gene.features):
# 只绘制CDS区域的部分
if feature.type == 'CDS':
# 绘制CDS的矩形框
rect = plt.Rectangle((feature.location.start, -index - 1), len(feature), 1, alpha=0.5, color='blue')
ax.add_patch(rect)
# 设置坐标轴标签
plt.xlabel('Position')
plt.ylabel('Feature')
plt.title('Gene Structure')
# 隐藏Y坐标轴刻度
plt.yticks([])
# 显示图形
plt.show()
在上述代码中首先使用BioPython库中的 SeqIO.read()
函数读取了一条名为 gene.fasta
的基因序列,并使用 enumerate()
函数以及基因序列对象的 features
属性迭代绘制基因结构图。由于我们只关心CDS (Coding Sequence) 区域的部分,因此只绘制 feature.type
属性为 CDS
的矩形框,使用Matplotlib库中的 Rectangle()
函数实现。接着,使用xlabel()
函数和ylabel()
函数设置横轴和纵轴的标签,使用title()
函数设置图表的标题。最后,使用 yticks()
函数隐藏了Y坐标轴的刻度,使用 show()
函数显示了图形。
6.2.2 绘制分子结构和生物标记
Python还可以用于绘制分子结构和生物标记等图表,这在药物研发方面有着重要的应用。这里我们以py3Dmol库为例,介绍如何利用Py3Dmol库绘制分子结构和生物标记。
import py3Dmol
def view_molecule(smiles):
# 创建py3Dmol.view对象
view = py3Dmol.view(width=400, height=400)
# 绘制分子结构
view.addModel(smiles, 'smi')
# 添加生物标记
view.addResLabels()
# 设定视角
view.zoomTo()
# 返回页面
return view.show()
# 绘制分子结构和生物标记
view_molecule('O=C1C(=O)CCC1C(=O)O')
在上述代码中首先使用py3Dmol.view()
函数创建了一个 py3Dmol.view
对象,用于展示分子结构和生物标记。然后,使用 addModel()
函数绘制具有一定结构的有机化合物,将其以SMILES格式传递给函数。使用 addResLabels()
函数标记每个原子的共价键。最后,通过调用 zoomTo()
函数来调整结构的视角。最后,使用 view.show()
函数显示图形。
七、小结回顾
Python可视化在近年来逐渐得到了广泛的应用和重视,在各行各业都有其热门的应用领域,如金融、生命科学、工程技术等。Python可视化的优势在于简单易用、图表多样、社区支持丰富等,既可以用于快速展示结果,又可以用于专业的科研数据分析和图表绘制。未来,Python可视化将会越来越成为一种主流,Python可视化库的更新、开发和创新将会为数据科学家和工程师带来无限的想象和创作空间,为人们的生产和生活带来便捷和创新。