![]() |
XLPack for Matplotlib Experimental Version 0.1
Example Programs
|
Plot contour lines of ((x + 100)^2 + (y - 20)^2 + 20*z)/1000 + 1 on x-y, y-z and z-x planes.
Private Function F_Data(X As Double, Y As Double, Z As Double) As Double
F_Data = ((X + 100) ^ 2 + (Y - 20) ^ 2 + 20 * Z) / 1000 + 1
End Function
Sub Plot_line(Ax3 As Axs3d, X1 As Double, X2 As Double, Y1 As Double, Y2 As Double, Z1 As Double, Z2 As Double)
Dim X(1) As Double, Y(1) As Double, Z(1) As Double
X(0) = X1: X(1) = X2: Y(0) = Y1: Y(1) = Y2: Z(0) = Z1: Z(1) = Z2
Call Ax3.Plot(2, X(), Y(), Z(), "color='0.4', linewidth=1, zorder=1e3")
End Sub
Sub Test_Axs3d_Contour()
Const Nx = 100, Ny = 300, Nz = 500, Nlev = 10
Dim X(Nx - 1) As Double, Y(Ny - 1) As Double, Z(Nz - 1) As Double
Dim Xmax As Double, Xmin As Double, Ymax As Double, Ymin As Double, Zmax As Double, Zmin As Double
Dim Dmax As Double, Dmin As Double
Dim Levels(Nlev - 1) As Double
Dim U() As Double, V() As Double, W() As Double
Dim I As Long, J As Long, K As Long
Dim Fig As Figure, Ax3 As Axs3d, C As PyObject
'-- Make data
For I = 0 To Nx - 1
X(I) = I
Next
For J = 0 To Ny - 1
Y(J) = J
Next
For K = 0 To Nz - 1
Z(K) = -K
Next
Xmin = 0: Xmax = Nx - 1: Ymin = 0: Ymax = Ny - 1: Zmin = 1 - Nz: Zmax = 0
Dmin = 1
Dmax = F_Data(X(Nx - 1), Y(Ny - 1), Z(0))
Call LineSpace(Dmin, Dmax, Nlev, Levels())
'-- Plot
Set Fig = Plt.Figure()
Set Ax3 = Fig.Add_subplot_3d()
' X-Y
ReDim U(Ny - 1, Nx - 1), V(Ny - 1, Nx - 1), W(Ny - 1, Nx - 1)
For I = 0 To Ny - 1
For J = 0 To Nx - 1
U(I, J) = X(J)
V(I, J) = Y(I)
W(I, J) = F_Data(X(J), Y(I), Z(0))
Next
Next
Call Ax3.Contour(Ny, Nx, U(), V(), W(), Levels(), Zdir:="z", Offset:=0)
For I = 0 To Ny - 1
For J = 0 To Nx - 1
W(I, J) = F_Data(X(J), Y(I), Z(Nz - 1))
Next
Next
Call Ax3.Contour(Ny, Nx, U(), V(), W(), Levels(), Zdir:="z", Offset:=Zmin)
' Z-X
ReDim U(Nx - 1, Nz - 1), V(Nx - 1, Nz - 1), W(Nx - 1, Nz - 1)
For J = 0 To Nx - 1
For K = 0 To Nz - 1
U(J, K) = X(J)
V(J, K) = F_Data(X(J), Y(0), Z(K))
W(J, K) = Z(K)
Next
Next
Call Ax3.Contour(Nx, Nz, U(), V(), W(), Levels(), Zdir:="y", Offset:=0)
For J = 0 To Nx - 1
For K = 0 To Nz - 1
V(J, K) = F_Data(X(J), Y(Ny - 1), Z(K))
Next
Next
Call Ax3.Contour(Nx, Nz, U(), V(), W(), Levels(), Zdir:="y", Offset:=Ymax)
' Y-Z
ReDim U(Ny - 1, Nz - 1), V(Ny - 1, Nz - 1), W(Ny - 1, Nz - 1)
For I = 0 To Ny - 1
For K = 0 To Nz - 1
U(I, K) = F_Data(X(Nx - 1), Y(I), Z(K))
V(I, K) = Y(I)
W(I, K) = Z(K)
Next
Next
Set C = Ax3.Contour(Ny, Nz, U(), V(), W(), Levels(), Zdir:="x", Offset:=Xmax)
For I = 0 To Ny - 1
For K = 0 To Nz - 1
U(I, K) = F_Data(X(0), Y(I), Z(K))
Next
Next
Call Ax3.Contour(Ny, Nz, U(), V(), W(), Levels(), Zdir:="x", Offset:=Xmin)
' Axes
Call Ax3.Set_xlim(Xmin, Xmax)
Call Ax3.Set_ylim(Ymin, Ymax)
Call Ax3.Set_zlim(Zmin, Zmax)
Call Plot_line(Ax3, Xmax, Xmax, Ymin, Ymax, Zmax, Zmax)
Call Plot_line(Ax3, Xmin, Xmax, Ymin, Ymin, Zmax, Zmax)
Call Plot_line(Ax3, Xmax, Xmax, Ymin, Ymin, Zmin, Zmax)
Call Ax3.Set_xlabel("X [km]")
Call Ax3.Set_ylabel("Y [km]")
Call Ax3.Set_zlabel("Z [m]")
' Plot
Call Fig.Colorbar(C, Ax:=Ax3, KwArgs:="fraction=0.02, pad=0.1, label='Name [units]'")
Call Ax3.View_init(40, -30, 0)
Call Plt.Show
End Sub