Matplotlib绘制带局部放大的多个子图

带局部放大的多个子图

# -*- coding: utf-8 -*-
"""
Created on Thu Oct 31 21:17:45 2019

@author: huang
"""

import xlrd
import numpy as np
import math
import matplotlib.pyplot as plt

from matplotlib.patches import ConnectionPatch
from matplotlib.font_manager import FontProperties
#from scipy import stats
#from pylab import * 
#mpl.rcParams['font.sans-serif'] = ['SimHei']

def Draw(Path1, Path2):
    # 定义字体
    fontdict1={'family':'Times New Roman',#宋体 常规
              'weight':'normal',
              'size':10,#7.5磅
          }
    
    # 数据
    dst_all,xlength = DistArr(Path1, Path2)
    # 绘制折线图
    # 参数
    Criterion = 3000
    Percent = 0.001
    ty1 = 15000
    startid = 900
    # 绘制画布
    plt.figure(num=1, figsize=(12, 5))
    
    # 激活第一个 subplot
    p1 = plt.subplot(1,  2,  1)
    x=range(0,xlength,1)
    y=dst_all[0:xlength]
    
    yMax = max(y)
    
    plt.plot(x,y)
    plt.xlabel('xxx',fontdict1)
    plt.ylabel('xxx',fontdict1)
    plt.axhline(Criterion,ls='--',color='black')
    plt.axis([0,xlength,0,yMax])
    
    # 激活第一个 subplot
    p2 = plt.subplot(1,  2,  2)
    
    x=range(startid,xlength,1)
    y=dst_all[startid:xlength]
    
    plt.plot(x,y)
    
    plt.xlabel('xxx',fontdict1)
    plt.ylabel('xxx',fontdict1)
    plt.axhline(Criterion,ls='--',color='black')
    #plt.axis([0,int(xlength*Percent),0,yMax])
    plt.axis([startid,xlength,0,yMax])
    
    
    # 画p1中即将被放大区域的方框
    tx0 = 0
    if Percent>0.05:
        tx1 = int(xlength*Percent) 
    else: 
        tx1 = int(xlength*0.06)
    ty0 = 0
    #ty1 = 5000
    
    sx = [tx0,tx1,tx1,tx0,tx0]
    sy = [ty0,ty0,ty1,ty1,ty0]
    p1.plot(sx,sy,"red")
    
    
    # 在两个子图之间画连接线
    xy2 = (10, yMax)
    xy1 = (tx1, ty1)
    con = ConnectionPatch(xyA=xy2,xyB=xy1,coordsA="data",coordsB="data",
    axesA=p2,axesB=p1)
    p1.add_artist(con)
    
    xy2 = (startid, 0)
    xy1 = (tx1, ty0)
    con = ConnectionPatch(xyA=xy2,xyB=xy1,coordsA="data",coordsB="data",
    axesA=p2,axesB=p1)
    p1.add_artist(con)

Path1 = 'xxx'
Path2 = 'xxx'

Draw(Path1, Path2)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Matlab中创建子局部放大,可以使用两种方法。第一种方法是手动设置绘制的数据,通过Matlab自的axes函数来创建子。具体步骤如下: 1. 首先,定义主的数据,例如使用linspace函数生成一组x轴数据t和对应的y轴数据y。 2. 创建主,使用plot函数将t和y绘制出来,并使用axis函数设置形的比例为等比例。 3. 使用axes函数创建子,通过设置Position参数来确定子的位置和大小。Position参数是一个四元组,表示子的左上角位置的x和y坐标以及子的宽度和高度。例如,可以设置axes('Position',[0.2,0.5,0.3,0.3])来创建一个位于主右上角的子,宽度和高度都为主的30%。 4. 在子绘制所需的局部放大区域的数据,例如使用linspace函数生成一组x轴数据t1和对应的y轴数据y1。 5. 使用plot函数将t1和y1绘制在子中,并使用xlim函数设置子的x轴范围为需要放大的区域,例如xlim([min(t1),max(t1)])。 这样就可以在Matlab中创建一个子局部放大。 另一种方法是直接绘制所有数据,但只显示需要放大的区域。具体步骤如下: 1. 首先,定义主的数据,例如使用linspace函数生成一组x轴数据t和对应的y轴数据y。 2. 创建主,使用plot函数将t和y绘制出来,并使用axis函数设置形的比例为等比例。 3. 使用axes函数创建子,通过设置Position参数来确定子的位置和大小。 4. 在子绘制所有数据,即将t和y绘制在子中。 5. 使用xlim函数设置子的x轴范围为需要放大的区域,例如xlim([1,1.2])。这样只会显示需要放大的区域,其他区域会被裁剪掉,从而实现局部放大效果。 这两种方法可以根据具体需求选择使用,其中第一种方法需要手动提取绘制的数据,而第二种方法则直接绘制所有数据但只显示需要放大的区域。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值