matplotlib 如何使用contourf设置Colorbar范围[重复]

2ul0zpep  于 2023-10-24  发布在  其他
关注(0)|答案(2)|浏览(159)

此问题已在此处有答案

Set Colorbar Range(6个回答)
set colorbar range with contourf(1个答案)
18天前关闭
如何减少与contourf一起使用时的颜色限制?来自图形本身的颜色边界被很好地设置为“vmin”和“vmax”,但颜色边界没有被修改。

import numpy as np
import matplotlib.pyplot as plt
x = np.arange(20)
y = np.arange(20)
data = x[:,None]+y[None,:]

X,Y = np.meshgrid(x,y)
vmin = 0
vmax = 15

#My attempt
fig,ax = plt.subplots()
contourf_ = ax.contourf(X,Y,data, 400, vmin=vmin, vmax=vmax)
cbar = fig.colorbar(contourf_)
cbar.set_clim( vmin, vmax )

# With solution from https://stackoverflow.com/questions/53641644/set-colorbar-range-with-contourf
levels = np.linspace(vmin, vmax, 400+1)
fig,ax = plt.subplots()
contourf_ = ax.contourf(X,Y,data, levels=levels, vmin=vmin, vmax=vmax)
cbar = fig.colorbar(contourf_)
plt.show()

来自“Set Colorbar Range in matplotlib“的解决方案适用于pcolormesh,但不适用于contourf。我想要的结果如下,但使用contourf。

fig,ax = plt.subplots()
contourf_ = ax.pcolormesh(X,Y,data[1:,1:], vmin=vmin, vmax=vmax)
cbar = fig.colorbar(contourf_)

如果限制被扩展,则来自“set colorbar range with contourf“的解决方案是可以的,但如果限制被减少,则不行。
我用的是matplotlib 3.0.2

ymzxtsji

ymzxtsji1#

下面的代码总是生成一个颜色与图形中的颜色相对应的条形图,但是对于[vmin,vmax]范围之外的值不显示颜色。
它可以被编辑(见内联注解),以给予你想要的结果,但是条形图的颜色仍然对应于图中的颜色,这仅仅是由于使用了特定的颜色图(我认为):

# Start copied from your attempt
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(20)
y = np.arange(20)
data = x[:, None] + y[None, :]

X, Y = np.meshgrid(x, y)
vmin = 0
vmax = 15

fig, ax = plt.subplots()

# Start of solution
from matplotlib.cm import ScalarMappable
levels = 400

level_boundaries = np.linspace(vmin, vmax, levels + 1)

quadcontourset = ax.contourf(
    X, Y, data,
    level_boundaries,  # change this to `levels` to get the result that you want
    vmin=vmin, vmax=vmax
)

fig.colorbar(
    ScalarMappable(norm=quadcontourset.norm, cmap=quadcontourset.cmap),
    ticks=range(vmin, vmax+5, 5),
    boundaries=level_boundaries,
    values=(level_boundaries[:-1] + level_boundaries[1:]) / 2,
)

总是正确的解决方案,不能处理[vmin,vmax]以外的值:x1c 0d1x
请求的解决方案:/skin/images/pcmhv.png

dffbzjpn

dffbzjpn2#

我不知道它已经存在多久了,但在matplotlib 3.5.0中,contourf中有一个“extend”选项,它在颜色栏上显示一个可爱的小箭头。请参阅contourf帮助页面。在您的场景中,我们可以做

fig,ax = plt.subplots()
contourf_ = ax.contourf(X,Y,data, levels=np.linspace(vmin,vmax,400),extend='max')
cbar = fig.colorbar(contourf_,ticks=range(vmin, vmax+3, 3))

相关问题