日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python 绘制局部放大图

發布時間:2024/3/24 python 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python 绘制局部放大图 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

請務必先看此文章: 【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 绘制局部放大图的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。