pythonic生物人

复现顶刊常用“Zoom region plot”

本期主角——局部放大图(Zoom region plot)。

局部放大图,是一种在主图中标记出感兴趣的局部区域,并通过单独的子图对这些区域进行放大的可视化方法。可帮助观察者更清晰地了解数据的特定部分,也不会丢失整体数据的全貌。

本期效果图,
本期效果图,

下面使用Python matplotlib一步步实现!

# 9.2.1_01
# -*- encoding: utf-8 -*-
'''
未经过允许禁止转载!
@Author  :   公众号: pythonic生物人
@Desc    :   9.2.1 分类散点图(不同颜色)
'''


import matplotlib.pyplot as plt
import pandas as pd
from mplfonts import use_font

iris = pd.read_csv('./matplotlib_data/iris.csv') 

labels = iris['鸢尾花种类']
categories = labels.unique() #提取鸢尾花的种类
colors = {
'setosa': 'red',
'versicolor': 'green',
'virginica': 'blue'
}   #设置不同的颜色

fig, ax = plt.subplots(dpi=500)
for category in categories:
    subset = iris[labels == category]
    ax.scatter(
        subset['花萼长度 (cm)'],
        subset['花萼宽度 (cm)'],
        label=category,  # 设置分类标签,方便图例中使用
        color=colors.get(category, 'gray'),  # 设置分类颜色
        s=150,
        alpha=0.6)

ax.set_xlabel('花萼长度 (cm)')
ax.set_ylabel('花萼宽度 (cm)')

ax.legend()

plt.show()

Image

在以上代码基础上,通过indicate_inset_zoom添加局部图,详细过称见代码注释,

# 创建嵌入的局部放大区域
axins1 = ax.inset_axes([1.1, 0.30, 0.47, 0.47])  

# 在局部放大区域中绘制相同的数据
for category in categories:
    subset = iris[labels == category]
    axins1.scatter(
        subset['花萼长度 (cm)'],
        subset['花萼宽度 (cm)'],
        color=colors.get(category, 'gray'),
        s=100,  
        alpha=0.7)

# 设置局部放大区域的显示范围,以突出您感兴趣的区域
axins1.set_xlim(4.7, 5.3)
axins1.set_ylim(3.2, 3.9)
axins1.tick_params(axis='both', which='major', labelsize=8) 、

# 添加指示局部放大区域的连线和边框
ax.indicate_inset_zoom(axins1, edgecolor="black", linestyle='--', alpha=0.6)

plt.show()
Image

当然,也可以添加多个局部图,定义两个局部区域并画图,然后通过indicate_inset_zoom添加局部图即可,

Image

本期结束!


-END-

获取绘图代码+测试数据+数据处理方法+依赖包安装方法,

👇(备注:299)

图片

👉Python matplotlib可视化教程

图片