我見過這麼多例子,只是不適用於我的情況。我想要做的是爲一個彩條設置一個簡單的最小值和最大值。設置圖像cmap的範圍很簡單,但這不會將相同的範圍應用於顏色條的最小值和最大值。 下面的代碼可以解釋:在matplotlib中設置顏色條上的限制
triang = Triangulation(x,y)
plt.tricontourf(triang, z, vmax=1., vmin=0.)
plt.colorbar()
的彩條仍固定於數據z的限制,雖然CMAP範圍現在固定在0和1
我見過這麼多例子,只是不適用於我的情況。我想要做的是爲一個彩條設置一個簡單的最小值和最大值。設置圖像cmap的範圍很簡單,但這不會將相同的範圍應用於顏色條的最小值和最大值。 下面的代碼可以解釋:在matplotlib中設置顏色條上的限制
triang = Triangulation(x,y)
plt.tricontourf(triang, z, vmax=1., vmin=0.)
plt.colorbar()
的彩條仍固定於數據z的限制,雖然CMAP範圍現在固定在0和1
I propose you incorporate you plot in a fig之間並從該樣品中得到啓示使用你看,你可以設置bounds
的顏色在顏色條和扁蝨的彩條
data = np.tile(np.arange(4), 2)
fig = plt.figure()
ax = fig.add_subplot(121)
cax = fig.add_subplot(122)
cmap = colors.ListedColormap(['b','g','y','r'])
bounds=[0,1,2,3,4]
norm = colors.BoundaryNorm(bounds, cmap.N)
im=ax.imshow(data[None], aspect='auto',cmap=cmap, norm=norm)
cbar = fig.colorbar(im, cax=cax, cmap=cmap, norm=norm, boundaries=bounds,
ticks=[0.5,1.5,2.5,3.5],)
plt.show()
。
這不是你想要達到的目標,但是對無花果的暗示可能有幫助。
This other one uses ticks
以及定義顏色條的比例。
import numpy as np
import matplotlib.pyplot as plt
xi = np.array([0., 0.5, 1.0])
yi = np.array([0., 0.5, 1.0])
zi = np.array([[0., 1.0, 2.0],
[0., 1.0, 2.0],
[-0.1, 1.0, 2.0]])
v = np.linspace(-.1, 2.0, 15, endpoint=True)
plt.contour(xi, yi, zi, v, linewidths=0.5, colors='k')
plt.contourf(xi, yi, zi, v, cmap=plt.cm.jet)
x = plt.colorbar(ticks=v)
print x
plt.show()
我遇到了同樣的問題,並提出了一個具體的(雖然毫無意義)這個問題的例子。註釋contourf命令將創建一個與數據具有相同邊界的顏色條,而不是顏色限制。
tricontourf的關卡選項似乎是解決此問題的好方法,但它需要extend ='both'選項才能包含超出圖中等級的值。
import matplotlib.tri as mtri
import numpy as np
from numpy.random import randn
from matplotlib import colors
numpy.random.seed(0)
x = randn(300)
y = randn(300)
z = randn(*x.shape)
triangles = mtri.Triangulation(x, y)
bounds=np.linspace(-1,1,10)
# sc = plt.tricontourf(triangles, z, vmax=1., vmin=-1.)
sc = plt.tricontourf(triangles, z, vmax=1., vmin=-1., levels = bounds,\
extend = 'both')
cb = colorbar(sc)
_ = ylim(-2,2)
_ = xlim(-2,2)
我認爲這個問題指出了一個錯誤,但它變成了一個使用/兼容性約束。解決方案是創建所需顏色條範圍的輪廓,並使用kwarg。欲瞭解更多信息,請看this issue。由於@tcaswell提供此解決方案:
import matplotlib.pyplot as plt
import numpy as np
x, y = np.mgrid[0:1:0.01, 0:1:0.01]
r = np.sqrt(x ** 2 + y ** 2)
z = np.sin(6 * np.pi * r)
fig0, ax0 = plt.subplots(1, 1,)
cf0 = ax0.contourf(x, y, z, np.arange(0, .5, .01),
extend='both')
cbar0 = plt.colorbar(cf0,)
從這裏,如果你不喜歡的彩條刻度,你可以用cbar0.set_ticks
調整。我已經證實,這也適用於tricontourf
。
我簡化了@ tcaswell的代碼,以獲得所需的結果。此外,他使用了新的viridis色彩映射表,但希望你能明白。
這可能是最簡單的方法。
...(你的代碼如圖所示)
plt.colorbar(boundaries=np.linspace(0,1,5))
...
太好了!這工作。我早些時候嘗試過,但錯過了plt.contourf裏面的v。這就是爲什麼它不起作用。非常感激。 –