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)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章