Matplotlib colorbar扩展,显示值

时间:2014-11-14 22:11:45

标签: python matplotlib plot colorbar

我正在尝试创建轮廓,以便用户可以指定轮廓范围,以便他们可以专注于某个值范围。根据数据,将有超出用户指定范围的值。我修改了这段代码来说明我的问题:

Python/Matplotlib - Colorbar Range and Display Values

此代码绘制从0到2的值,但是我设置了轮廓范围'v'(0.1到1.5),以便在轮廓之外有值,并且我使用扩展(extend = both)来扩展轮廓,超出范围的值显示为颜色(以确保没有白色区域)。我想要的是在轮廓刻度上显示轮廓范围之外的最大值(2)和最小值(-0.1),以便它们也出现在刻度上,我该怎么做?

少了另一种方式

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(0.1, 1.5, 10, endpoint=True)#set so that there are values outside contour
plt.contour(xi, yi, zi, v, linewidths=0.5, colors='k')
plt.contourf(xi, yi, zi, v, cmap=plt.cm.jet,extend='both')
cbar=plt.colorbar(ticks=v,extendrect='True')
plt.show()

see image

我想要的是数据的最小值和扩展上显示的数据的最大值。

我修改了轮廓标签的代码,包括轮廓的最小值,轮廓水平和轮廓的最大值。最小值和最大值不会出现在颜色条上(更新后的图像)zi.min()是-0.1,zi.max()是2.
我调查了y-ticks: print cbar.ax.get_yticks():生成值0到1 print cbar.ax.get_ylim():产生值-0.11和1.11(扩展条的末尾)

如何显示最小值和最大值?我可以使用yticks / ylim信息吗?

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(0.1, 1.5, 10, endpoint=True)#contour levels
plt.contour(xi, yi, zi, v, linewidths=0.5, colors='k')
plt.contourf(xi, yi, zi, v, cmap=plt.cm.jet,extend='both')
cbarticks=np.hstack([zi.min(),v,zi.max()])#contour tick labels
cbar=plt.colorbar(ticks=cbarticks,extendrect='True',extendfrac='auto',spacing='proportional')
print cbar.ax.get_ylim()
print cbar.ax.get_yticks()#
plt.show()

enter image description here

2 个答案:

答案 0 :(得分:0)

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(0.1, 1.5, 10, endpoint=True)
tick = v.flatten()
tick = np.insert(tick,[0,10],[-0.1, 2.0])
CS = plt.contourf(xi, yi, zi, len(tick), cmap=plt.cm.jet, levels=tick)
C = plt.contour(xi, yi, zi, len(tick), colors='black', levels=tick )
plt.colorbar(CS, shrink=0.5, aspect=5, ticks=tick)
plt.show()

Result Plot

答案 1 :(得分:0)

假设您有来自数据的zminzmax以及来自用户输入的uminumax,他们希望关注特定范围的z

您应该可以从stdcm=pl.cm.whatever开始定义和使用自定义色彩映射,就像这样

blue      blue  ----------  red      red
zmin      umin              umax     zmax

并最终明确指定色条上的抽搐

cbtics = [zmin]+[umin+i*(umax-umin)/n for i in range(n+1)]+[zmax]