我正在创建2个表面图,其中仅更改垂直(“ z”)轴值。
第一个图表完全符合我的要求,但是在第二个图表中,它看起来像是采用第一个图表的值来应用颜色图。
这是第一张图表:
这是第二张图表:
这是第一个图表的代码:
x1 = np.linspace(df3.num_stdev.min(), df3.num_stdev.max(), len(df3.index))
y1 = np.linspace(df3.hold.min(), df3.hold.max(), len(df3.index))
x2, y2 = np.meshgrid(x1,y1)
z2 = griddata((df3.num_stdev, df3.hold), df3.cumpnl, (x2,y2), method='cubic')
fig1 = plt.figure()
ax = fig1.gca(projection='3d')
surf = ax.plot_surface(x2,y2,z2, rstride=1, cstride=1, cmap=cm.RdYlBu,
linewidth=0,antialiased=False)
ax.set_zlim(df3.cumpnl.min(),df3.cumpnl.max())
ax.zaxis.set_major_locator(LinearLocator(10))
ax.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))
fig1.colorbar(surf, shrink=0.5, aspect=5)
titulo = "Mean Reverting PnL for {0} with 5d cum returns".format(currency)
plt.xlabel('num_stdev')
plt.ylabel('holding')
plt.title(titulo)
plt.show()
这是第二张图表的代码:
df4 = df3[pd.notnull(df3['sharpe'])] # getting rid of Nan Sharpes
x3 = np.linspace(df4.num_stdev.min(), df4.num_stdev.max(), len(df4.index))
y3 = np.linspace(df4.hold.min(), df4.hold.max(), len(df4.index))
x4, y4 = np.meshgrid(x3,y3)
z4 = griddata((df4.num_stdev, df4.hold), df4.sharpe, (x4,y4), method='cubic')
fig2 = plt.figure()
ax1 = fig2.gca(projection='3d')
surf2 = ax1.plot_surface(x4,y4,z4, rstride=1, cstride=1, cmap=cm.RdYlBu,
linewidth=0, antialiased=False)
ax1.set_zlim(df4.sharpe.min(),df4.sharpe.max())
#ax1.zaxis.set_major_locator(LinearLocator(10))
#ax1.zaxis.set_major_formatter(FormatStrFormatter('%.02f'))
fig2.colorbar(surf2, shrink=0.5, aspect=5)
titulo2 = "Sharpe for {0} with 5d cum returns".format(currency)
plt.xlabel('num_stdev')
plt.ylabel('holding')
plt.title(titulo2)
plt.show()
最佳答案
可以在两个等级上强制执行vmin
/ vmax
&.set_clim()
范围( -10, +30 )
和( -0.20, +0.20 )
会要求IMHO两者使用不同的标量映射器(同时保留可能的色图范围),因此可以根据相应的( z4.min(), z4.max() )
和( z2.min(), z2.max() )
设置归一化
cbar = mpl.colorbar.ColorbarBase( ax,
cmap = cm,
norm = mpl.colors.Normalize( vmin = -0.20,
vmax = 0.20
)
)
cbar.set_clim( -0.20, 0.20 )
cbar2 = mpl.colorbar.ColorbarBase( ax1,
cmap = cm,
norm = mpl.colors.Normalize( vmin = -20.0,
vmax = 30.0
)
)
cbar2.set_clim( -20.0, 30.0 )
对于鹰派蟒蛇,该帖子有意使用非PEP-8源代码格式,因为作者发现在学习阶段,代码的可读性提高了对任务解决方案的关注,并帮助他们习惯了底层的概念,而不是花精力正式加入版式。希望尊重提供帮助的原则,并以易于阅读的名义宽恕非PEP-8样式格式。
关于python - 2个带有matplotlib python的不同表面图,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33220511/