Python3.0科學計算學習之繪圖(二)

来源:https://www.cnblogs.com/chenzhijuan-324/archive/2019/04/08/10673635.html
-Advertisement-
Play Games

(1) np.mashgrid()函數: 生成網路點坐標矩陣,可以是二維網路矩陣,也可以是三維網路矩陣。其中,每個交叉點就是網路點,描述這些網路點的矩陣就是坐標矩陣(橫坐標矩陣X中的每個元素與縱坐標矩陣Y中對應位置元素,共同構成一個點的完整坐標)。 背景示例:網路點與坐標矩陣的解釋如下: impor ...


(1) np.mashgrid()函數:-----生成網路點坐標矩陣,可以是二維網路矩陣,也可以是三維網路矩陣。其中,每個交叉點就是網路點,描述這些網路點的矩陣就是坐標矩陣(橫坐標矩陣X中的每個元素與縱坐標矩陣Y中對應位置元素,共同構成一個點的完整坐標)。

背景示例:網路點與坐標矩陣的解釋如下:

import numpy as np

import matplotlib.pyplot as plt

x=np.array([[0,1,2],[0,1,2]])        #最簡單的方法是,可以把橫縱坐標矩陣X,Y寫出來,生成坐標點

y=np.array([[0,0,0],[1,1,1]])

plt.plot(x,y,color='red',marker='.',markersize=10,linestyle='-.')      #點的形狀為原點,點設置大一些,線性為電劃線。

plt.grid(True)

plt.show()   

註意:按照矩陣給坐標點信息,matplotlib會把橫坐標矩陣中,每一列的點當做同一條線。正如上例中把plotlinestyle=’ ‘改為linestyle=’-.’就會發現A-D,B-E,C-F是連接的。

                                  

對於很多網路點的情況,可用如下meshgrid()函數方法:

   因註意到坐標矩陣其中有大量的重覆---X的每一行都一樣,Y的每一列都一樣。故基於此規律性,numpy提供的np.meshgrid()函數可以快速生成坐標矩陣X,Y

x=np.linspace(-0.5,2.,10)    

y=np.linspace(-1.5,4.,10)

X,Y=np.meshgrid(x,y)     #輸入的x,y是網路點的橫縱坐標列向量(非矩陣),輸出的XY就是坐標矩陣。

plt.plot(X,Y,color='limegreen',marker='.',linestyle='')

plt.grid(True)

plt.show()

                   

(2) Python可視化庫matplotlib.pyplotcontour()contourf()函數

區別contour()counterf() 函數功能相同,都是畫三維等高線圖的,不同點在於contourf會根據不同的水平值用不同的顏色來填充繪圖(即會對等高線間的區域進行填充)。

contour()counterf() 都是繪製三維圖,其中前兩個參數xy為兩個等長一維數組,第三個參數z為二維數組(表示平面點xiyi映射的函數值)。

matplotlib等高線的繪製步驟:

等高線是三維圖像在二維空間的投影

首先準備三維函數及待投影平面的網格坐標。

import numpy as np

import matplotlib.pyplot as plt

def height(x,y):

    return (1-x/2+x**5+y**3)*np.exp(-x**2-y**2)

x=np.linspace(-3,3,300)

y=np.linspace(-3,3,300)

X,Y=np.meshgrid(x,y)

l 繪製等高線

C=plt.contour(X,Y,height(X,Y),10,colors='black')   # 10代表等高線的密集程度。如果是0,則圖像被一分為二

plt.contourf(X,Y,height(X,Y),10,alpha=0.75,cmap=plt.cm.hot)

#為等高線填充顏色 10表示按照高度分成10alpha表示透明度 cmap表示漸變標準

l 添加高度與數字

plt.clabel(C,inline=True,fontsize=10)     #inline=True表示高度寫在等高線上

plt.xticks(())     

plt.yticks(())

#去掉坐標軸刻度

plt.show()

#顯示圖片

l 最後結果圖為:

                                           

實例:尋找某一函數的最小值

import numpy as np

import matplotlib.pyplot as plt

import scipy.optimize as so

rosenbrockfunction=lambda x,y: (1-x)**2+100*(y-x**2)**2  #使用lambda關鍵字所表示的匿名函數來使代碼變得更加簡潔

x=np.linspace(-.5,2.,100)

y=np.linspace(-1.5,4.,100)

X,Y=np.meshgrid(x,y)

Z=rosenbrockfunction(X,Y)

cs=plt.contour(X,Y,Z,np.logspace(0,3.5,7,base=10),cmap='gray')   #以第四個參數給出的值為標準來繪製等高線並用gray顏色繪圖   

#plt.contourf(X,Y,Z,10,alpha=0.75,cmap='gray')

rosen=lambda x:rosenbrockfunction(x[0],x[1])

solution,iterates=so.fmin_powell(rosen,x0=np.array([0,-0.7]),retall=True)

#迭代方法so.fmin_powell利用鮑威爾方法來尋找最小值(由一個給定的起始值x0開始,並且當給出選項retall=True時報告所有的迭代,經過16次迭代後得出x=0,y=0

x,y=zip(*iterates)

plt.plot(x,y,'ko')

plt.plot(x,y,'k:',linewidth=1)

plt.title('Steps of powells method to compute a minimum')

plt.clabel(cs)

#clabel使用該contour創建的一個等值線集對象來註釋對應函數值的水平值

補充:np.logspace()常用於創建等比數列,它也有常用的3個參數,第一個參數表示起始點的指數,第二個參數終止點的指數,第三個參數表示數列的個數;最後,通過base參數可以修改底數

                          

(4) 圖像

Imshow()函數用於在指定的視窗中顯示一幅圖像。它負責對圖像進行處理,並顯示其格式,但是不顯示圖片,其後跟著plt.show()才能顯示出來。

imshow圖像顯示函數:imshowf,G) 其中,f是函數,G是顯示該圖像的灰度級數。

                    Imshow(f,[low,high]) 小於或者等於low的值都顯示為黑色,大於或等於high的值都顯示為白色

                    Imshow(f,[ ]) [ ] 自動將low設為函數最小值,將high設為函數最大值。

Colorbar:增加顏色類標的代碼是plt.colorbar()

例如:import numpy as np

import matplotlib.pyplot as plt

X=np.array([[1,2],[3,4],[5,6]])

plt.imshow(X)

plt.colorbar()

plt.show()   

實例:將數組可視化為圖像,

import numpy as np

import matplotlib.pyplot as plt

# 下麵代碼演示瞭如何通過meshgrid生成複數參數值的矩陣:

def mandelbrot(h,w,maxit=20):

    X,Y=np.meshgrid(np.linspace(-2,0.8,w),np.linspace(-1.4,1.4,h))

    c=X+Y*1j

    z=c

    exceeds=np.zeros(z.shape,dtype=bool)

    for iteration in range(maxit):

        z=z**2+c

        exceeded=np.abs(z) > 4

        exceeds_now=exceeded & (np.logical_not(exceeds))

        exceeds[exceeds_now] = True

        z[exceeded]=2

    return (exceeds)   

#命令imshow將矩陣展示為圖像,所選的顏色貼圖顯示了序列出現的白色無界的區域,而其他區域顯示為黑色。

plt.imshow(mandelbrot(400,400),cmap='gray')

plt.axis('off')    #使用plt.axis('off') 關閉坐標軸

plt.show()       

# 使用imshow的無插值的圖像

                                       

註意:imshow命令預設使用插值使圖像看起來更好,這在矩陣較小時可以看的很清楚。

plt.imshow(mandelbrot(400,400),interpolation='nearest',cmap='gray')

Interpolation代表插值運算,nearest表示最近鄰近插值法,只是插值方式中的一種。

cmap表示繪圖時的樣式,這裡選擇的是ocean主題

#使用最近鄰近插值法所得的圖像

                                        

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.可以把七層協議簡化成四層協議鏈路層 網路層 傳輸層 應用層 2.通過路由器連接的兩個網路網路層ip提供的是一個逐跳協議,提供了一種不可靠的服務,中間有可能會丟傳輸層tcp在ip的基礎上提供了可靠的傳輸層 比喻:tcp就是淘寶賣家 ,ip就是包裹,中間如果包裹丟了,賣家會重新發一個包裹,這裡會有一 ...
  • 鏈表:由一系列不必再記憶體中相連的結構組成,每一個結構均含有表元素和指向後繼結構的指針。 與數組、列表的主要區別: 記憶體不連續; 不能通過下標隨機訪問。 優點: 插入、刪除操作效率高,時間複雜度為o(1); 記憶體利用率高,不會浪費記憶體; 大小不固定,擴展靈活; 缺點: 隨機訪問性差,查找效率低,時間復 ...
  • 死磕 java集合之ConcurrentHashMap源碼分析(一) 它的存儲結構是什麼樣的? 它使用了哪些鎖? 它是怎麼擴容的? 它是否是強一致性的? 它不能解決哪些問題? 它的源碼中使用了哪些不常見的技術? ...
  • '''迭代器:兩個基本方法:iter()和next()迭代器是一個可以記住遍歷的位置的對象。 迭代器對象從集合等第一個元素開始訪問,直到所有的元素被訪問結束,迭代器只能往前不會後退。 迭代器有兩個基本的方法:iter()和next() 字元串,列表或元組對象都可以用於創建迭代器。 迭代器的一大優點是 ...
  • 1. 調用鏈Cat 1.1. 調用鏈演進 1.2. 開源產品比較 1.3. 監控場景 1.4. cat的增值作用 1.5. cat典型報表 1.5.1. 應用報錯大盤 1.5.2. 業務大盤 1.5.3. logView 1.5.4. 可視化的logView 1.5.5. 應用報表(APM) 1.5 ...
  • 一、請求鉤子 在客戶端和伺服器交互的過程中,有些準備工作或稍微工作是需要處理的,比如:在請求開始時,建立資料庫連接;在請求開始時,根據需求進行許可權校驗;在請求結束時,指定數據的交互格式等。為了讓每個視圖函數避免編寫重覆功能的代碼,flask提供了通用設施的功能,即請求鉤子。 例子: 運行結果: 第1 ...
  • 概念 公平鎖/非公平鎖 公平鎖是指多個線程按照申請鎖的順序來獲取鎖。 非公平鎖是指多個線程獲取鎖的順序並不是按照申請鎖的順序,有可能後申請的線程比先申請的線程優先獲取鎖。有可能,會造成優先順序反轉或者饑餓現象。 對於 Java ReentrantLock而言,通過構造函數指定該鎖是否是公平鎖,預設是非 ...
  • "概要" "schema" "changeset" "struct" "map" "總結" 概要 Ecto 中, 對資料庫的操作中經常用到 4 個類型: schema changeset struct map 在 Ecto 的 API 中, 基本都是都是對這 4 個類型的操作, 這 4 個類型的關係 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...