Python可视化:Matplotlib基础教程

简介: Matplotlib是一个用于创建静态、动态、交互性可视化图表的开源库,具有如下特点:* 可以创建2D或3D的图形,包括线性图、条形图、散点图、饼图、直方图等* 可定制图形的各个属性,包括图形的大小、颜色、线型、标签、注释等* 支持多种底层绘图库,包括Tkinter、wxPython、Qt、GTK等

一、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 可能会变得非常缓慢或者停止响应。为了解决这个问题,我们可以使用以下技巧:

  1. 分块处理数据。将数据分成一小块一小块的进行处理和绘制,而不是将整个数据集都加载到内存中。
  2. 减小数据点的数量。使用 sample() 函数减小数据集的大小,或者使用平滑过渡的方法代替点图。
  3. 使用并行计算。使用多线程技术或者进程池技术等来提升程序的运行速度。
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 万个随机数的数据集 xy。我们可以使用 第 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 个二维坐标的数据集 xy,并使用 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可视化库的更新、开发和创新将会为数据科学家和工程师带来无限的想象和创作空间,为人们的生产和生活带来便捷和创新。

目录
相关文章
|
5天前
|
Python
SciPy 教程 之 Scipy 显著性检验 3
本教程介绍Scipy显著性检验,包括其基本概念、原理及应用。显著性检验用于判断样本与总体假设间的差异是否显著,是统计学中的重要工具。Scipy通过`scipy.stats`模块提供了相关功能,支持双边检验等方法。
12 1
|
7天前
|
机器学习/深度学习 Python
SciPy 教程 之 SciPy 插值 2
SciPy插值教程:介绍插值概念及其在数值分析中的应用,特别是在处理数据缺失时的插补和平滑数据集。SciPy的`scipy.interpolate`模块提供了强大的插值功能,如一维插值和样条插值。通过`UnivariateSpline()`函数,可以轻松实现单变量插值,示例代码展示了如何对非线性点进行插值计算。
11 3
|
8天前
|
移动开发 数据可视化 数据挖掘
利用Python实现数据可视化:以Matplotlib和Seaborn为例
【10月更文挑战第37天】本文旨在引导读者理解并掌握使用Python进行数据可视化的基本方法。通过深入浅出的介绍,我们将探索如何使用两个流行的库——Matplotlib和Seaborn,来创建引人入胜的图表。文章将通过具体示例展示如何从简单的图表开始,逐步过渡到更复杂的可视化技术,帮助初学者构建起强大的数据呈现能力。
|
10天前
|
机器学习/深度学习 数据处理 Python
SciPy 教程 之 SciPy 空间数据 4
本教程介绍了SciPy的空间数据处理功能,主要通过scipy.spatial模块实现。内容涵盖空间数据的基本概念、距离矩阵的定义及其在生物信息学中的应用,以及如何计算欧几里得距离。示例代码展示了如何使用SciPy计算两点间的欧几里得距离。
26 5
|
9天前
|
机器学习/深度学习 Python
SciPy 教程 之 SciPy 空间数据 6
本教程介绍了SciPy处理空间数据的方法,包括使用scipy.spatial模块进行点位置判断、最近点计算等内容。还详细讲解了距离矩阵的概念及其应用,如在生物信息学中表示蛋白质结构等。最后,通过实例演示了如何计算两点间的余弦距离。
19 3
|
8天前
|
机器学习/深度学习 数据处理 Python
SciPy 教程 之 SciPy 空间数据 7
本教程介绍了SciPy的空间数据处理功能,涵盖如何使用`scipy.spatial`模块进行点的位置判断、最近点计算等操作。还详细解释了距离矩阵的概念及其在生物信息学中的应用,以及汉明距离的定义和计算方法。示例代码展示了如何计算两个点之间的汉明距离。
16 1
|
6天前
|
机器学习/深度学习 数据处理 Python
SciPy 教程 之 SciPy 插值 3
本教程介绍了SciPy中的插值方法,包括什么是插值及其在数据处理和机器学习中的应用。通过 `scipy.interpolate` 模块,特别是 `Rbf()` 函数,展示了如何实现径向基函数插值,以平滑数据集中的离散点。示例代码演示了如何使用 `Rbf()` 函数进行插值计算。
13 0
|
6天前
|
Python
SciPy 教程 之 Scipy 显著性检验 1
本教程介绍Scipy显著性检验,包括统计假设、零假设和备择假设等概念,以及如何使用scipy.stats模块进行显著性检验,以判断样本与总体假设间是否存在显著差异。
11 0
|
2月前
|
Python
以下是一些常用的图表类型及其Python代码示例,使用Matplotlib和Seaborn库。
以下是一些常用的图表类型及其Python代码示例,使用Matplotlib和Seaborn库。
|
2月前
|
数据可视化 数据挖掘 Linux
震撼发布!Python数据分析师必学,Matplotlib与Seaborn数据可视化实战全攻略!
在数据科学领域,数据可视化是连接数据与洞察的桥梁,能让复杂的关系变得直观。本文通过实战案例,介绍Python数据分析师必备的Matplotlib与Seaborn两大可视化工具。首先,通过Matplotlib绘制基本折线图;接着,使用Seaborn绘制统计分布图;最后,结合两者在同一图表中展示数据分布与趋势,帮助你提升数据可视化技能,更好地讲述数据故事。
50 1