强制颜色条刻度为 min/max 值
Forcing colorbar ticks at min/max values
我正在使用 matplotlib
中的 contourf
函数进行绘图,并想添加一个颜色条,我注意到有时刻度不会达到 max/min 值。
是否有一种干净的方法来强制它在这些值上设置刻度?
注意:检查z
的max
和min
显示颜色条代表大约-1到1的值,因此我希望这个 ot 能够被反映出来,这样人们就可以看到 colobar 的范围,以及介于两者之间的一些刻度。
演示我在说什么的情节和代码
import matplotlib.pyplot as plt
import numpy as np
# Data to plot.
x, y = np.meshgrid(np.arange(7), np.arange(10))
z = np.sin(0.5 * x) * np.cos(0.52 * y)
fig, ax = plt.subplots()
cs = ax.contourf(x, y, z, levels=25)
ax.grid(c="k", ls="-", alpha=0.3)
fig.colorbar(cs, ax=ax)
fig.savefig("example.png", bbox_inches="tight")
最简洁的方法似乎是为 contourf
提供明确的级别。如果没有给出明确的级别,contourf
似乎会根据数据中的最小值和最大值选择自己的级别,并且还会尝试找到“好看”的数字。之后,刻度被设置为这些数字的子集,这样刻度总是与实际水平重合。 (如果您使用 colorbar(..., ticks=...)
,这些报价不一定与水平重合。)
由于正弦和余弦在给定示例中没有达到 -1
和 1
,因此它们不在范围内。
以下代码显示刻度如何取决于所选级别。 np.linspace(-1, 1, 24)
级别不是很好的整数,但 matplotlib 仍然选择一个子集来显示。
import matplotlib.pyplot as plt
import numpy as np
x, y = np.meshgrid(np.arange(7), np.arange(10))
z = np.sin(0.5 * x) * np.cos(0.52 * y)
fig, (ax1, ax2) = plt.subplots(ncols=2, figsize=(12, 3))
for ax in (ax1, ax2):
numcontours = 25 if ax == ax1 else 24
cs = ax.contourf(x, y, z, levels=np.linspace(-1, 1, numcontours))
ax.grid(c="k", ls="-", alpha=0.3)
fig.colorbar(cs, ax=ax)
ax.set_title(f'{numcontours} levels from -1 to 1')
plt.show()
我正在使用 matplotlib
中的 contourf
函数进行绘图,并想添加一个颜色条,我注意到有时刻度不会达到 max/min 值。
是否有一种干净的方法来强制它在这些值上设置刻度?
注意:检查z
的max
和min
显示颜色条代表大约-1到1的值,因此我希望这个 ot 能够被反映出来,这样人们就可以看到 colobar 的范围,以及介于两者之间的一些刻度。
演示我在说什么的情节和代码
import matplotlib.pyplot as plt
import numpy as np
# Data to plot.
x, y = np.meshgrid(np.arange(7), np.arange(10))
z = np.sin(0.5 * x) * np.cos(0.52 * y)
fig, ax = plt.subplots()
cs = ax.contourf(x, y, z, levels=25)
ax.grid(c="k", ls="-", alpha=0.3)
fig.colorbar(cs, ax=ax)
fig.savefig("example.png", bbox_inches="tight")
最简洁的方法似乎是为 contourf
提供明确的级别。如果没有给出明确的级别,contourf
似乎会根据数据中的最小值和最大值选择自己的级别,并且还会尝试找到“好看”的数字。之后,刻度被设置为这些数字的子集,这样刻度总是与实际水平重合。 (如果您使用 colorbar(..., ticks=...)
,这些报价不一定与水平重合。)
由于正弦和余弦在给定示例中没有达到 -1
和 1
,因此它们不在范围内。
以下代码显示刻度如何取决于所选级别。 np.linspace(-1, 1, 24)
级别不是很好的整数,但 matplotlib 仍然选择一个子集来显示。
import matplotlib.pyplot as plt
import numpy as np
x, y = np.meshgrid(np.arange(7), np.arange(10))
z = np.sin(0.5 * x) * np.cos(0.52 * y)
fig, (ax1, ax2) = plt.subplots(ncols=2, figsize=(12, 3))
for ax in (ax1, ax2):
numcontours = 25 if ax == ax1 else 24
cs = ax.contourf(x, y, z, levels=np.linspace(-1, 1, numcontours))
ax.grid(c="k", ls="-", alpha=0.3)
fig.colorbar(cs, ax=ax)
ax.set_title(f'{numcontours} levels from -1 to 1')
plt.show()