请务必先看此文章: 【Python】Matplotlib局部放大图画法(https://juejin.cn/post/6844904183548608520)

这篇文章已经非常详细,但是没有数据,所以自己生成了一些数据,以及对部分代码进行了函数封装,以便于二次使用。

import matplotlib.pyplot as plt
from matplotlib.patches import  ConnectionPatch
import numpy as npdef zone_and_linked(ax,axins,zone_left,zone_right,x,y,linked='bottom',x_ratio=0.05,y_ratio=0.05):"""缩放内嵌图形,并且进行连线ax:         调用plt.subplots返回的画布。例如: fig,ax = plt.subplots(1,1)axins:      内嵌图的画布。 例如 axins = ax.inset_axes((0.4,0.1,0.4,0.3))zone_left:  要放大区域的横坐标左端点zone_right: 要放大区域的横坐标右端点x:          X轴标签y:          列表,所有y值linked:     进行连线的位置,{'bottom','top','left','right'}x_ratio:    X轴缩放比例y_ratio:    Y轴缩放比例"""xlim_left = x[zone_left]-(x[zone_right]-x[zone_left])*x_ratioxlim_right = x[zone_right]+(x[zone_right]-x[zone_left])*x_ratioy_data = np.hstack([yi[zone_left:zone_right] for yi in y])ylim_bottom = np.min(y_data)-(np.max(y_data)-np.min(y_data))*y_ratioylim_top = np.max(y_data)+(np.max(y_data)-np.min(y_data))*y_ratioaxins.set_xlim(xlim_left, xlim_right)axins.set_ylim(ylim_bottom, ylim_top)ax.plot([xlim_left,xlim_right,xlim_right,xlim_left,xlim_left],[ylim_bottom,ylim_bottom,ylim_top,ylim_top,ylim_bottom],"black")if linked == 'bottom':xyA_1, xyB_1 = (xlim_left,ylim_top), (xlim_left,ylim_bottom)xyA_2, xyB_2 = (xlim_right,ylim_top), (xlim_right,ylim_bottom)elif  linked == 'top':xyA_1, xyB_1 = (xlim_left,ylim_bottom), (xlim_left,ylim_top)xyA_2, xyB_2 = (xlim_right,ylim_bottom), (xlim_right,ylim_top)elif  linked == 'left':xyA_1, xyB_1 = (xlim_right,ylim_top), (xlim_left,ylim_top)xyA_2, xyB_2 = (xlim_right,ylim_bottom), (xlim_left,ylim_bottom)elif  linked == 'right':xyA_1, xyB_1 = (xlim_left,ylim_top), (xlim_right,ylim_top)xyA_2, xyB_2 = (xlim_left,ylim_bottom), (xlim_right,ylim_bottom)con = ConnectionPatch(xyA=xyA_1,xyB=xyB_1,coordsA="data",coordsB="data",axesA=axins,axesB=ax)axins.add_artist(con)con = ConnectionPatch(xyA=xyA_2,xyB=xyB_2,coordsA="data",coordsB="data",axesA=axins,axesB=ax)axins.add_artist(con)
  • 生成数据
# x坐标
x = np.arange(1,1001)# 生成y轴数据,并添加随机波动
y1 = np.log(x)
indexs = np.random.randint(0,1000,800)
for index in indexs:y1[index] += np.random.rand() - 0.5y2 = np.log(x)
indexs = np.random.randint(0,1000,800)
for index in indexs:y2[index] += np.random.rand() - 0.5y3 = np.log(x)
indexs = np.random.randint(0,1000,800)
for index in indexs:y3[index] += np.random.rand() - 0.5
  • 可视化数据
# 绘制主图
fig, ax = plt.subplots(1,1,figsize=(12,7))
ax.plot(x,y1,color='#f0bc94',label='trick-1',alpha=0.7)
ax.plot(x,y2,color='#7fe2b3',label='trick-2',alpha=0.7)
ax.plot(x,y3,color='#cba0e6',label='trick-3',alpha=0.7)
ax.legend(loc='right')# plt.show()

  • 添加局部放大图
# 绘制缩放图
axins = ax.inset_axes((0.4, 0.1, 0.4, 0.3))# 在缩放图中也绘制主图所有内容,然后根据限制横纵坐标来达成局部显示的目的
axins.plot(x,y1,color='#f0bc94',label='trick-1',alpha=0.7)
axins.plot(x,y2,color='#7fe2b3',label='trick-2',alpha=0.7)
axins.plot(x,y3,color='#cba0e6',label='trick-3',alpha=0.7)# 局部显示并且进行连线
zone_and_linked(ax, axins, 100, 150, x , [y1,y2,y3], 'right')plt.show()

  • 使用不同参数进行不同区域的放大
# 绘制缩放图
axins = ax.inset_axes((0.4, 0.1, 0.4, 0.3))# 在缩放图中也绘制主图所有内容,然后根据限制横纵坐标来达成局部显示的目的
axins.plot(x,y1,color='#f0bc94',label='trick-1',alpha=0.7)
axins.plot(x,y2,color='#7fe2b3',label='trick-2',alpha=0.7)
axins.plot(x,y3,color='#cba0e6',label='trick-3',alpha=0.7)# 局部显示并且进行连线
zone_and_linked(ax, axins, 700, 760, x , [y1,y2,y3], 'bottom')
plt.show()

Python 绘制局部放大图相关推荐

  1. Python中局部放大图案例

    例子一: 先上完整代码和效果图: import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.axes_grid1.ins ...

  2. 怎么用python找论文_如何利用Python绘制学术论文图表方法

    论文中图表形式多样,常用的处理工具有excel.MATLAB以及Python等,excel自处理的方法有两个缺陷: 1.当数据较多时,容易出现excel"翻白眼"的现象: 2.需要 ...

  3. python绘制条形图用什么函数_Python绘制正余弦函数图像完整代码

    通过python绘制正弦和余弦函数,从默认的设置开始,一步一步地调整改进,让它变得好看,变成我们初高中学习过的图象那样.通过这个过程来学习如何进行对图表的一些元素的进行调整. 01. 简单绘图 mat ...

  4. python绘制所有特征的密度图(density plot)

    python绘制所有特征的密度图(density plot) # python绘制所有特征的密度图: n = len(input_feats) #密度图kde,查查分布 cols = 4 rows = ...

  5. python绘制影像组学训练集、测试集对应的ROC曲线以及瀑布图(rad-score 瀑布图)

    python绘制影像组学训练集.测试集对应的ROC曲线以及瀑布图(rad-score 瀑布图) # 所有数据的瀑布图 tagets_all = df['label'] tagets_all = df. ...

  6. 什么是折线图?怎样用Python绘制?怎么用?终于有人讲明白了(附代码)

    来源:大数据DT 本文约5400字,建议阅读10分钟 本文为你介绍数据分析时经常用到的折线图,可以用来呈现哪些数据关系?在数据分析过程中可以解决哪些问题?怎样用Python绘制折线图? 01 概述 折 ...

  7. 柱状图、堆叠柱状图、瀑布图有什么区别?怎样用Python绘制?(附代码)

    来源:大数据DT(ID:hzdashuju) 作者:屈希峰,资深Python工程师,知乎多个专栏作者 本文约8000字,建议阅读20分钟 柱状图是当前应用最广泛的图表之一,你几乎每天都可以在电子产品上 ...

  8. 层次聚类python_用python绘制层次聚类图

    层次聚类(Hierarchical clustering)代表着一类的聚类算法,这种类别的算法通过不断的合并或者分割内置聚类来构建最终聚类. 聚类的层次可以被表示成树(或者树形图(dendrogram ...

  9. 利用Python绘制 3D 体素色温图

    简 介: 测试了Matplotlib中的 体素绘制函数 voxels() ,但是无论是在 AI Studio中执行,还是直接在本地执行,都会出了错误.也就是无法通过 gca(projection='3 ...

最新文章

  1. Linux常用系统备份、恢复命令
  2. bzoj1072: [SCOI2007]排列perm
  3. 【译】BINDER - ANALYSIS AND EXPLOITATION OF CVE-2020-0041
  4. boost::pointer_traits的用法实例
  5. 关闭页面那点事儿...
  6. python处理word文档保留格式_python 处理document文档 保留原样式
  7. hdoj 1285 确定比赛名次 【拓扑排序】
  8. PostgreSQL SQL OUTLINE插件sr_plan (保存、篡改、固定 执行计划)
  9. Kafka、RabbitMQ、RocketMQ等消息中间件的介绍和对比
  10. linux卸载emc硬盘,关于EMC symmetrix新分磁盘在Linux主机无法fdisk? 求助
  11. hdu 6203 ping ping ping(贪心+树状数组+dfs序)
  12. 【Maven】win10系统安装Maven
  13. Modbus RTU转Modbus TCP网关的应用
  14. A2 雷达多点触控
  15. GNU Radio: USRP2 and N2x0 Series
  16. 累死你的不是工作方式
  17. 网狐大联盟客户端游戏表为空问题解决
  18. 工业网关需要具备的能力及分类
  19. 烧录器DediWare General使用方法
  20. 天啊!中国第一奇人:天天枸杞水,活到256岁!

热门文章

  1. 保洁阿姨看完都会了!了解Android架构组件后,构建APP超简单!大厂面试题汇总
  2. ZWeily的小品文(一)MFC中的文件读写问题
  3. 科技给生活带来的变化,科技发展有哪些好处
  4. Dell optiplex 7060ssf系统迁移到M.2 nvme 固态硬盘
  5. 平房误差函数_误差函数公式及性质
  6. 第一篇 微信商城 开发前的准备工作
  7. 蓝牙防丢器原理、实现与Android BLE接口编程
  8. java在苹果电脑上编程软件下载_KOOV编程软件mac版下载
  9. 基础笔记:图的一些概念
  10. 程序的效率-汽车里程表问题