python - 2个不同的曲面图与matplotlib python

标签 python matplotlib surface

我正在创建 2 个曲面图,其中我只更改垂直(“z”)轴值。 第一个图表看起来正是我想要的,但在第二个图表中它看起来像是采用第一个图表的值来应用颜色图。

这是第一个图表: Chart 1 这是第二张图表: Chart 2

这是第一个图表的代码:

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 ) 恕我直言,两者都需要不同的标量映射器(同时保留合理的颜色映射范围) 因此可以根据各自的 ( 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 )

对于鹰派 pythoneers,该帖子有意使用非 PEP-8 源代码格式,因为作者的经验是,在学习阶段,代码可读性提高了对任务解决方案的关注,并有助于习惯底层概念,而不是花精力在正式遵守排版上。希望尊重提供帮助的原则,以易于阅读的名义原谅非 PEP-8 样式格式。

关于python - 2个不同的曲面图与matplotlib python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33220511/

相关文章:

字母的python滑动窗口平均值

python - 如何在 Google App Engine 上对 Django View 进行单元测试?

python - 最小化多变量函数

python - 使用 python 检查两个文件的新行独立标识的最佳方法

python - Luhn 的算法伪代码代码

python - 在python中显示二进制文件中的数据

python-3.x - key 错误 : 'axes.color_cycle is not a valid rc parameter (see rcParams.keys() for a list of valid parameters)'

python - 如何用不同颜色绘制一条线

使用 Plots 或 PyPlot 在 Julia 中绘制 3D 表面

python - 将圆柱体拟合到分散的 3D XYZ 点数据