[英]How to plot a function showing discrete steps rather than continuous changes between samples in 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.