我正在尝试为我的等高线图添加一个颜色条,但条形图不是连续的.
该图是使用以下代码完成的.
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm
cmap = matplotlib.cm.viridis
contour_start = 500
contour_num = 20
contour_factor = 1.20
# calculate contour levels
cl = contour_start * contour_factor ** np.arange(contour_num)
negcl = cl[::-1] * -1
supercl = np.concatenate([negcl, cl])
# create the figure
fig = plt.figure(figsize=(6,5), dpi=150)
ax = fig.add_subplot(111)
# plot the contours
cp = ax.contour(datab, supercl, cmap=cmap,)
cbar = plt.colorbar(cp)
# cbar.set_alpha(1)
# cbar.draw_all()
plt.show()
Run Code Online (Sandbox Code Playgroud)
我试着补充一下
cbar.set_alpha(1)
cbar.draw_all()
Run Code Online (Sandbox Code Playgroud)
但它没有用,所以我认为这与谨慎的轮廓水平有关.我不确定.
我意识到数据不包含在内,代码不会按原样运行.我没有包括因为数据加载部分依赖于另一个不常见的库.尽管如此,我想指出matplotlib文档与类似的colorbar(最后一个例子,右侧颜色条)有类似的情节:https: //matplotlib.org/examples/pylab_examples/contour_demo.html
解决方案可以是从与轮廓图本身不同的ScalarMappable创建颜色条.然后,新创建的ScalarMappable将通过Normalize实例从等高线图中获取颜色范围.
以下代码是轮廓演示示例的改编版本.
import numpy as np
import matplotlib.mlab as mlab
import matplotlib.colors
import matplotlib.pyplot as plt
x = np.arange(-3.0, 3.0, 0.025)
X, Y = np.meshgrid(x, x)
Z1 = mlab.bivariate_normal(X, Y, 1.0, 1.0, 0.0, 0.0)
Z2 = mlab.bivariate_normal(X, Y, 1.5, 0.5, 1, 1)
Z = 10.0 * (Z2 - Z1)
fig, ax = plt.subplots()
cs = plt.contour(X, Y, Z, cmap="viridis")
norm= matplotlib.colors.Normalize(vmin=cs.cvalues.min(), vmax=cs.cvalues.max())
# a previous version of this used
#norm= matplotlib.colors.Normalize(vmin=cs.vmin, vmax=cs.vmax)
# which does not work any more
sm = plt.cm.ScalarMappable(norm=norm, cmap = cs.cmap)
sm.set_array([])
fig.colorbar(sm, ticks=cs.levels)
plt.show()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2902 次 |
| 最近记录: |