Stellen Sie einen farbigen Würfel in matplotlib grafisch dar

Ich arbeite an einem statistischen Code, der mit Matlab eine Vielzahl von Diagrammen generiert. Die Diagrammtypen reichen von einfachen Kreis- und Balkendiagrammen bis zu 3D-Histogrammgittern.

Jetzt möchten wir eine schöne GUI mit der Software gehen. Wir haben einen Matlab-GUI-Prototyp, aber die Matlab-GUI weist eine Reihe von Problemen auf. Daher möchten wir auf eine robustere GUI umsteigen. Meine beste Option scheint PySide + matplotlib zu sein, aber bisher habe ich keine Möglichkeit gefunden, das 3D-Gitter zu zeichnen. Der Matlab-Code verwendet Contourslice. In matplotlib scheint es keinen ähnlichen Aufruf zu geben. Kann mir jemand helfen, herauszufinden, wie ich mit matplotlib eine solche Grafik erhalten kann? Bisher habe ich nur die Idee, 6 Flächen grafisch darzustellen, um einen Würfel zu erstellen.

Empfehlungen für andere GUI / Graph-Bibliothekskombinationen sind auch willkommen. Der Basis-Stat-Code ist C ++, daher ist Python nur eine von vielen Optionen. Nach einigen der Antworten, die ich auf StackOverflow gesehen habe, kann matplotlib in 3D unannehmbar langsam sein. Vielleicht wäre R besser?

Hier ist der Matlab-Code:

clf
xlo = -1.800000e+01; 
xhi = 1.000000e+01; 
ylo = 1.000000e+01; 
yhi = 3.000000e+01; 
zlo = -1.000000e+03; 
zhi = 1.000000e+03; 
X=zeros(16,16,16);
Y=zeros(16,16,16);
Z=zeros(16,16,16);
V=zeros(16,16,16);
% fill in X, Y, Z, and V  huge amount of text
xt = [-1.800000e+01:2.800000e-01:1.000000e+01];
yt = [1.000000e+01:2.000000e-01:3.000000e+01];
zt = [-1.000000e+03:2.000000e+01:1.000000e+03];
isoval = -1.428280e+01;
h = patch(isosurface(X,Y,Z,V,isoval),... 
'FaceColor', 'blue', ... 
'EdgeColor', 'none', ... 
'AmbientStrength', 0.2, ... 
'SpecularStrength', 0.7, ... 
'DiffuseStrength', 0.4);
isonormals(X,Y,Z,V,h);
patch(isocaps(X,Y,Z,V,isoval), ...
'FaceColor', 'interp', ... 
'EdgeColor', 'none'); 
axis([xlo xhi ylo yhi zlo zhi])
daspect([2.800000e+01,2.000000e+01,2.000000e+03])
set(gca,'linewidth',2)
set(gca,'fontweight','bold')
set(gca,'fontsize',12)
grid on
box on
colormap('default'); colorbar

view(3) 
set(gcf,'Renderer','zbuffer')
lighting phong
cin = 'n';
if (cin == 'y')
xin = questdlg('Axis to slide through ?', 'Axis', 'X', 'Y', 'Z', 'X');
xin = lower(xin);
for i = 1 : 101
if gcf ~= plotFigure
return
end
if (xin == 'y')
h = contourslice(X,Y,Z,V,xt(i),[],[],101);
elseif (xin == 'x')
h = contourslice(X,Y,Z,V,[],yt(i),[],101);
elseif (xin == 'z')
h = contourslice(X,Y,Z,V,[],[],zt(i),101);
end
axis([-1.8000e+01  1.0000e+01  1.0000e+01  3.0000e+01 -1.0000e+03  1.0000e+03 -8.6774e+01  4.2066e+02])
set(gca,'linewidth',2)
set(gca,'fontweight','bold')
set(gca,'fontsize',12)
grid on
box on
view(3)
set(h, 'Linewidth', 10)
colorbar
pause(0.3)
if (i < 101)
clf
end
end
end

Antworten auf die Frage(1)

Ihre Antwort auf die Frage