使用matplotlib colorbar / colorbarbase和点数据

时间:2015-12-18 13:11:15

标签: python matplotlib

所以我需要创建带有设定点的2D绘图,使用" z轴"价值,就像你可以看到的那样,这不是问题。

plot

我现在需要的是在右边添加全彩色标尺的颜色条。我试图这样做但没有效果:< 这是我的代码

x=numpy.loadtxt('h2o.dat',unpack=True)
shiftposition(x,-45.1*prze,266.67)
vmin=x[0].min()
vmax=x[0].max()
dv=vmax-vmin

cmap = cm.jet
colors = matplotlib.colors.Normalize(vmin+0.0, vmax+0.0)


fig, ax = plt.subplots()


plt.arrow(-46,345, 100*math.sin(math.radians(40)), 100*math.cos(math.radians(40)), head_width=20, head_length=20, fc='r', ec='r',color='r')
plt.arrow(25,163, 100*math.sin(math.radians(125)), 100*math.cos(math.radians(125)), head_width=20, head_length=20, fc='r', ec='r',color='r')
plt.arrow(-280,342, 100*math.sin(math.radians(-55)), 100*math.cos(math.radians(-55)), head_width=20, head_length=20, fc='b', ec='b',color='b')
plt.arrow(-233,120, 100*math.sin(math.radians(-140)), 100*math.cos(math.radians(-140)), head_width=20, head_length=20, fc='b', ec='b',color='b')

plt.scatter(-20*prze,242.8,marker='+',s=50,color='k')
ax.scatter(x[1],x[2],marker='^',color=cm.jet((x[0]-vmin)/dv,1),s=50,zorder=3)
cax = matplotlib.colorbar.ColorbarBase(ax,  cmap=cmap,norm=colors,orientation='vertical',spacing='uniform',ticklocation='auto')
ax.set_xlim(-500,250)
ax.set_ylim(-200,550)
ax.invert_xaxis()
plt.show()

我得到的就是这个: fail :<

我做错了什么?

1 个答案:

答案 0 :(得分:2)

如果设置了散射的cmap,并将颜色设置为值数组,而不是调用现在的色彩映射,则可以执行此操作。

例如:

import matplotlib.pyplot as plt
import numpy as np

x=y=z=np.linspace(0,10,11)

fig,ax = plt.subplots()

p=ax.scatter(x,y,c=z,cmap='viridis',marker='^',edgecolor='None',s=200)

fig.colorbar(p,ax=ax)

plt.show()

enter image description here

对于你的例子,我想这样的事情应该这样做:

p = ax.scatter(x[1],x[2],marker='^',color=(x[0]-vmin)/dv,s=50,zorder=3,cmap='jet')
fig.colorbar(p,ax=ax)