簡體   English   中英

Python中連續而不是離散的強度梯度描述函數

[英]Continuous rather than discrete intensity gradient describing function in python

我正在嘗試使用強度/顏色比例繪制函數,結果是離散的而不是連續的顏色(例如,白色最大)。 強度和黑色為0。它似乎不受“ np.linspace”中點數的影響,這有點讓我感到困惑。

x = y = np.linspace(0, 4*np.pi, 2000)

def cos(x, y):
    return np.cos(x)**2

def squared(x, y):
    return x**2

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

Z = cos(X, Y)
plt.contourf(Z, cmap = 'Greys')

Z = squared(X, Y)
plt.contourf(Z, cmap = 'Greys')

在此處輸入圖片說明

在此處輸入圖片說明

plt.contourf應該是離散的-這樣您就可以看到輪廓。 該方案的一種選擇如下:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm

x = y = np.linspace(0, 4*np.pi, 2000)

def cos(x, y):
    return np.cos(x)**2

def squared(x, y):
    return x**2

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

plt.imshow(Z, vmin = 0., vmax = 1., cmap=plt.cm.gray_r) # gray_r to reverse color and make it as you show in your images
plt.show()

在這里,您將繪制一個填充的輪廓圖。 如果要顯示離散輪廓,輪廓圖最有意義。 例如,氣象圖通常以這種樣式顯示等壓線,或者地理地圖通過“輪廓”顯示等高線。

默認情況下,matplotlib選擇〜8個輪廓,但是確切的數量可能會因數據規模而異。

您可以通過levels參數選擇級別的數量(大約)。 因此,增加該數字將為您顯示更連續的漸變。

plt.contourf(Z, levels = 121, cmap = 'Greys')

在此處輸入圖片說明

但是,總的來說,如果需要連續圖像,則寧願確實繪制圖像,

dx = dy = np.diff(x)[0]
extent = x.min()-dx/2, x.max()+dx/2, y.min()-dx/2, y.max()+dx/2
plt.imshow(Z, cmap = 'Greys', extent=extent, aspect="auto")

在此處輸入圖片說明

您可能會注意到兩者之間幾乎沒有視覺上的區別,但是imshow方法快得多(很多很多),因為不需要使用輪廓算法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM