matplotlib從起點出發(14)_Tutorial_imshow_origin_extent

0 總述

imshow()允許你將圖像(將進行顏色映射——基于norm和cmap——的2D數組或將按原樣使用的3D RGB(A)的數組)渲染到數據空間中的矩形區域。最終渲染中圖像的方向由原點和范圍關鍵字參數(以及生成的AxesImage實例上的屬性)和Axes的數據限制控制。

extent關鍵字參數控制數據坐標中的邊界框,圖像將填充該邊界框在數據坐標中指定為(左、右、上、下),origin關鍵字參數控制圖像填充該邊界框的方式,最終渲染圖像中的方向也受Axes限制的影響。

提示
下面的大部分代碼用于向繪圖添加標簽和信息文本,所描述的原點和范圍的影響可以在圖中看到,而無需遵循所有的代碼細節。
為了快速理解,你可能希望跳過下面的代碼詳細信息,直接繼續討論結果。

import matplotlib.pyplot as plt
import numpy as npfrom matplotlib.gridspec import GridSpecdef index_to_coordinate(index, extent, origin):"""Return the pixel center of an index."""left, right, bottom, top = extenthshift = 0.5 * np.sign(right - left)left, right = left + hshift, right - hshiftvshift = 0.5 * np.sign(top - bottom)bottom, top = bottom + vshift, top - vshiftif origin == 'upper':bottom, top = top, bottomreturn {"[0, 0]": (left, bottom),"[M', 0]": (left, top),"[0, N']": (right, bottom),"[M', N']": (right, top),}[index]def get_index_label_pos(index, extent, origin, inverted_xindex):"""Return the desired position and horizontal alignment of an index label."""if extent is None:extent = lookup_extent(origin)left, right, bottom, top = extentx, y = index_to_coordinate(index, extent, origin)is_x0 = index[-2:] == "0]"halign = 'left' if is_x0 ^ inverted_xindex else 'right'hshift = 0.5 * np.sign(left - right)x += hshift * (1 if is_x0 else -1)return x, y, haligndef get_color(index, data, cmap):"""Return the data color of an index."""val = {"[0, 0]": data[0, 0],"[0, N']": data[0, -1],"[M', 0]": data[-1, 0],"[M', N']": data[-1, -1],}[index]return cmap(val / data.max())def lookup_extent(origin):"""Return extent for label positioning when not given explicitly."""if origin == 'lower':return (-0.5, 6.5, -0.5, 5.5)else:return (-0.5, 6.5, 5.5, -0.5)def set_extent_None_text(ax):ax.text(3, 2.5, 'equals\nextent=None', size='large',ha='center', va='center', color='w')def plot_imshow_with_labels(ax, data, extent, origin, xlim, ylim):"""Actually run ``imshow()`` and add extent and index labels."""im = ax.imshow(data, origin=origin, extent=extent)# extent labels (left, right, bottom, top)left, right, bottom, top = im.get_extent()if xlim is None or top > bottom:upper_string, lower_string = 'top', 'bottom'else:upper_string, lower_string = 'bottom', 'top'if ylim is None or left < right:port_string, starboard_string = 'left', 'right'inverted_xindex = Falseelse:port_string, starboard_string = 'right', 'left'inverted_xindex = Truebbox_kwargs = {'fc': 'w', 'alpha': .75, 'boxstyle': "round4"}ann_kwargs = {'xycoords': 'axes fraction','textcoords': 'offset points','bbox': bbox_kwargs}ax.annotate(upper_string, xy=(.5, 1), xytext=(0, -1),ha='center', va='top', **ann_kwargs)ax.annotate(lower_string, xy=(.5, 0), xytext=(0, 1),ha='center', va='bottom', **ann_kwargs)ax.annotate(port_string, xy=(0, .5), xytext=(1, 0),ha='left', va='center', rotation=90,**ann_kwargs)ax.annotate(starboard_string, xy=(1, .5), xytext=(-1, 0),ha='right', va='center', rotation=-90,**ann_kwargs)ax.set_title(f'origin: {origin}')# index labelsfor index in ["[0, 0]", "[0, N']", "[M', 0]", "[M', N']"]:tx, ty, halign = get_index_label_pos(index, extent, origin,inverted_xindex)facecolor = get_color(index, data, im.get_cmap())ax.text(tx, ty, index, color='white', ha=halign, va='center',bbox={'boxstyle': 'square', 'facecolor': facecolor})if xlim:ax.set_xlim(*xlim)if ylim:ax.set_ylim(*ylim)def generate_imshow_demo_grid(extents, xlim=None, ylim=None):N = len(extents)fig = plt.figure(tight_layout=True)fig.set_size_inches(6, N * (11.25) / 5)gs = GridSpec(N, 5, figure=fig)columns = {'label': [fig.add_subplot(gs[j, 0]) for j in range(N)],'upper': [fig.add_subplot(gs[j, 1:3]) for j in range(N)],'lower': [fig.add_subplot(gs[j, 3:5]) for j in range(N)]}x, y = np.ogrid[0:6, 0:7]data = x + yfor origin in ['upper', 'lower']:for ax, extent in zip(columns[origin], extents):plot_imshow_with_labels(ax, data, extent, origin, xlim, ylim)columns['label'][0].set_title('extent=')for ax, extent in zip(columns['label'], extents):if extent is None:text = 'None'else:left, right, bottom, top = extenttext = (f'left: {left:0.1f}\nright: {right:0.1f}\n'f'bottom: {bottom:0.1f}\ntop: {top:0.1f}\n')ax.text(1., .5, text, transform=ax.transAxes, ha='right', va='center')ax.axis('off')return columns

1 默認范圍

首先,讓我們看一下默認范圍 default extent = None

generate_imshow_demo_grid(extents=[None])

在這里插入圖片描述

通常,對于形狀(M, N)的數組,第一個索引沿垂直方向運行,第二個索引沿水平方向運行。像素中心位于整數位置,水平范圍為0到N'= N - 1,垂直范圍為0到M'= M - 1。origin確定如何在邊界框中填充邊框。

對于origin = 'lower':

  • [0, 0]對應的是(左,下)
  • [M', 0]對應的是(左,上)
  • [0, N']對應的是(右,下)
  • [M', N']對應的是(右,上)

對于origin = 'upper' 將會反轉垂直軸的方向和填充:

  • [0, 0]對應的是(左,上)
  • [M', 0]對應的是(左,下)
  • [0, N']對應的是(右,上)
  • [M', N']對應的是(右,下)

總之,[0, 0]的位置和范圍受到origin的影響:

origin[0, 0]位置范圍
upper上左(-0.5, numcols-0.5, numrows-0.5, -0.5)
lower下左(-0.5, numcols-0.5, -.05, numrows-0.5)

origin的默認值由rcParams["image.origin"](默認值為’upper’)設置,默認為’upper’以匹配數學和計算機圖像索引約定中的矩陣索引約定。

2 顯式范圍

通過設置范圍,我們定義圖像區域的坐標。對基礎圖像數據進行插值/重采樣以填充該區域。

如果Axes設置為自動縮放,則Axes的視圖限制將設置為范圍匹配,從而確保(left, bottom)設置的坐標位于Axes的左下角。但是,這可能會反轉軸,因此它們不會在“自然”方向上增加:

extents = [(-0.5, 6.5, -0.5, 5.5),(-0.5, 6.5, 5.5, -0.5),(6.5, -0.5, -0.5, 5.5),(6.5, -0.5, 5.5, -0.5)]columns = generate_imshow_demo_grid(extents)
set_extent_None_text(columns['upper'][1])
set_extent_None_text(columns['lower'][0])

在這里插入圖片描述

3 顯式確定范圍和Axes極限

如果我們通過顯式設置set_xlim/set_ylim來固定Axes極限,我們會強制Axes的一定大小和方向。這可以將圖像的“左-右”和“上-下”感覺與屏幕上的方向分離。

在下面的示例中,我們選擇了略大于范圍的極限(注意Axes內的白色區域)。

雖然我們保留了前面示例中的范圍,但坐標(0,0)現在顯式地放在左下角,值向上和向右增加(從查看者的角度來看)。我們可以看到:

  • 坐標(左,下)錨定圖像,然后填充朝向數據空間中(右,上)點的框;
  • 第一列始終最靠近“左”;
  • 原點控制第一行是最接近“頂部”還是“底部”;
  • 圖像可以沿任一方向反轉;
  • 圖像的“左-右”和“自上-下”感覺可能與屏幕上的方向無關。

在這里插入圖片描述

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/719239.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/719239.shtml
英文地址,請注明出處:http://en.pswp.cn/news/719239.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

一.數據分析簡介

目錄 一、了解數據分析 1.1 什么是數據分析 1.2 數據分析的重要性 1.3 數據分析的基本流程 數據獲取 數據處理 1.4 數據分析的應用場景 客戶分析 營銷分析 二、數據分析工具 jupyter 2.1 編輯器安裝 2.2 Jupyter快捷使用 一、了解數據分析 學習數據分析&#xff0…

[激光原理與應用-75]:激光器設計過程中,功率下降的主要原因大全

目錄 前言&#xff1a;激光器的本質是“電”轉“光”的設備 一、激光器功率下降的原因 二、壽命到期導致功率下降的因素 三、光損耗導致激光器輸出功率下降的因素 四、激光器中的能量轉化不完全導致的功率下降的因素 五、溫度變化導致激光器功率下降的影響因素 六、材料…

LeetCode28 最后一個單詞的長度

題目 給你一個字符串 s&#xff0c;由若干單詞組成&#xff0c;單詞前后用一些空格字符隔開。返回字符串中 最后一個 單詞的長度。單詞 是指僅由字母組成、不包含任何空格字符的最大子字符串。 示例 示例 1&#xff1a;輸入&#xff1a;s "Hello World" 輸出&#x…

Spring Security Oauth資源服務器并發情況下獲取用戶信息錯亂

文章目錄 Oauth2 資源服務器并發情況下獲取用戶信息錯亂問題描述項目配置源碼分析 解決方案1、修改源碼2&#xff0c;添加新的子類實現&#xff0c;并作為新bean注入 Oauth2 資源服務器并發情況下獲取用戶信息錯亂 問題描述 當用戶A與用戶B分別持有一個合法的令牌token 訪問同…

FPGA之加法邏輯運算

由于FPGA需要被反復燒寫&#xff0c;它實現組合邏輯的基本結構不可能像ASIC 那樣通過固定的與非門來完成&#xff0c;而只能采用一種易于反復配置的結構。查找表可以很好地滿足這一要求&#xff0c;目前主流FPGA都采用了基于SRAM 工藝的查找表結構。LUT本質上就是一個RAM。它把…

HarmonyOS-卡片頁面能力說明和使用動效能力

卡片頁面能力說明 開發者可以使用聲明式范式開發ArkTS卡片頁面。如下卡片頁面由DevEco Studio模板自動生成&#xff0c;開發者可以根據自身的業務場景進行調整。 ArkTS卡片具備JS卡片的全量能力&#xff0c;并且新增了動效能力和自定義繪制的能力&#xff0c;支持聲明式范式的…

python | 列表,元組,字符串,集合,字典

列表&#xff1a; 可以容納任意數目不同類型的元素&#xff08;支持我們學過的任意數據類型&#xff09;元素之間有先后順序用中括號包裹&#xff0c;每個元素用逗號隔開 例如&#xff1a; students [林黛玉,薛寶釵,賈元春,賈探春,史湘云,妙玉,賈迎春,賈惜春,王熙鳳,賈巧姐…

匯編語言程序設計實驗三 數據串傳送和查表程序

實驗目的和要求 1、堆棧。堆棧指示器SP和堆棧操作指令PUSH。POP。 2、段寄存器和物理地址計算。 3、查表法和查表指令XLAT。 4、數據串傳送程序和數據串傳送指令MOVS。STOS及重復前輟REP。 5、循環指令ROL。邏輯與指令AND和清方向位指令CLD。 6、偽操作指令DB。 實驗環境…

五步法搞定 BI 業務需求梳理

五步法搞定 BI 業務需求梳理。高手就是把復雜的事情簡單化&#xff0c;簡單的東西重復做、認真做。 01 五步法是哪五步 第一、明確用戶 五步法搞定 BI 業務需求梳理。高手就是把復雜的事情簡單化&#xff0c;簡單的東西重復做、認真做。 第二、明確指標 在明確需求用戶的前…

LeetCode 2125.銀行中的激光束數量

銀行內部的防盜安全裝置已經激活。給你一個下標從 0 開始的二進制字符串數組 bank &#xff0c;表示銀行的平面圖&#xff0c;這是一個大小為 m x n 的二維矩陣。 bank[i] 表示第 i 行的設備分布&#xff0c;由若干 ‘0’ 和若干 ‘1’ 組成。‘0’ 表示單元格是空的&#xff0…

NERF論文筆記

NeRF:Representing Scene as Neural Radiance Fields for View Synthesis 筆記 摘要 實現了一個任意視角視圖生成算法&#xff1a;輸入稀疏的場景圖像&#xff0c;通過優化連續的Volumetric場景函數實現&#xff1b;用全連接深度網絡表達場景&#xff0c;輸入是一個連續的5維…

Unity(第二十部)效果 粒子、線條和拖尾

1、粒子系統 粒子系統介紹 Unity 粒子系統是 Unity 引擎中用于創建和控制粒子效果的工具。它可以模擬各種自然現象&#xff0c;如火焰、煙霧、雨滴等&#xff0c;也可以用于創建特效&#xff0c;如魔法光芒、爆炸效果等。 粒子系統組成 在 Unity 中&#xff0c;粒子系統由發射…

用 Dockerfile為鏡像添加SSH服務

1、基礎鏡像ubuntu:18.04 2、替換為國內的安裝源 3、安裝openssh-server 4、允許root用戶遠程登陸 5、暴露端口22 6、服務開機自啟動 1.創建目錄 [rootopenEuler-node1 db]# mkdir sshd_ubuntu 2.創建 Dockerfile、 run.sh 、authorized_keys、vim aliyun.list 文件 [rootop…

網盤拉新如何對接?盤點最靠譜的一手渠道平臺

2024網盤行業再次重燃戰火。字節旗下產品頭條搜索極速版APP、悟空瀏覽器APP推出對應的網盤功能&#xff0c;剛剛開放了拉新推廣&#xff0c;現在是一個不能錯過新項目的好時機。 如果你對網盤拉新推廣充滿熱情&#xff0c;千萬不要錯過星子助推聯合字節推出的網盤項目機會。小…

python自動化之如何利用allure生成測試報告

Allure測試報告框架幫助你輕松實現”高大上”報告展示。本文通過示例演示如何從0到1集成Allure測試框架。重點展示了如何將Allure集成到已有的自動化測試工程中、以及如何實現報表的優化展示。Allure非常強大&#xff0c;支持多種語言多種測試框架&#xff0c;無論是Java/Pytho…

成功的交易沒有對錯,只有邏輯

大部分人將交易失敗歸咎于心態&#xff0c;但其實我們是否認真思考過自己的基本功是否扎實呢&#xff1f;這篇文章將引導你換個角度看待交易&#xff0c;讓你明白自己應該努力的方向。 曾經&#xff0c;你或許認為資金體量小、信息不對稱、技術不過關、心態不過硬是阻礙交易發展…

TikTok外貿系統的核心功能及其源代碼分享!

隨著全球化的不斷推進&#xff0c;外貿業務成為越來越多企業的增長動力&#xff0c;TikTok作為一個全球性的社交媒體平臺&#xff0c;其用戶基數龐大、活躍度高&#xff0c;為外貿業務提供了無限的商機。 為了幫助企業在TikTok上更好地開展外貿業務&#xff0c;TikTok外貿系統…

【DDD】學習筆記-聚合和聚合根:怎樣設計聚合?

今天我們來學習聚合&#xff08;Aggregate&#xff09;和聚合根&#xff08;AggregateRoot&#xff09;。 我們先回顧下上一講&#xff0c;在事件風暴中&#xff0c;我們會根據一些業務操作和行為找出實體&#xff08;Entity&#xff09;或值對象&#xff08;ValueObject&…

47、WEB攻防——通用漏洞Java反序列化EXP生成數據提取組件安全

文章目錄 序列化和反序列化的概念&#xff1a; 序列化&#xff1a;把java對象轉換成字節流的過程&#xff1b;反序列化&#xff1a;把字節流恢復為java對象的過程。 對象的序列化主要有兩種用途&#xff1a; 把對象的字節流永久的保存在硬盤上&#xff0c;通常存放在一個文件…

網絡分析工具簡介及匯總

文章目錄 一、網絡分析工具軟件是什么二、網絡分析工具軟件作用三、常見的網絡分析工具 一、網絡分析工具軟件是什么 網絡分析工具軟件是一種用于捕獲、分析和解釋網絡數據包的工具。它們可以直接從網絡接口上捕獲數據包&#xff0c;并提供詳細的信息和統計數據&#xff0c;以幫…