Ich verwende Matplotlib um dreidimensionale Arrays zu visualisieren. Ich habe es fast so, wie ich es will, abgesehen von einem kleinen Haken ... siehe die Abbildung und die unten stehende Beschreibung von dem, was ich ihm zu tun bekommen kann und was ich es ... tun will3D-Plot mit Matplotlib: Achsen ausblenden, Achsenbezeichnungen aber beibehalten?
- Zeigen Sie eine Reihe von Würfeln mit Etiketten, aber auch eine Menge anderer Sachen.
- Zeigen Sie eine Reihe von Würfeln, aber keine Achsenbeschriftungen.
- Dies ist, was ich will, aber es nicht tun kann ... Ich möchte eine Reihe von Würfeln mit Achsen-Etiketten, aber sonst nichts anzeigen.
Ich hoffe, euch mir :) Im folgenden sehen Sie die Quelle helfen kann.
from mpl_toolkits.mplot3d import axes3d
import matplotlib.pyplot as plt
from matplotlib import rcParams
import numpy as np
rcParams['axes.labelsize'] = 14
rcParams['axes.titlesize'] = 16
rcParams['xtick.labelsize'] = 14
rcParams['ytick.labelsize'] = 14
rcParams['legend.fontsize'] = 14
rcParams['font.family'] = 'serif'
rcParams['font.serif'] = ['Computer Modern Roman']
rcParams['text.usetex'] = True
rcParams['grid.alpha'] = 0.0
def make_cube():
""" A Cube consists of a bunch of planes..."""
planes = {
"top" : ([[0,1],[0,1]], [[0,0],[1,1]], [[1,1],[1,1]]),
"bottom" : ([[0,1],[0,1]], [[0,0],[1,1]], [[0,0],[0,0]]),
"left" : ([[0,0],[0,0]], [[0,1],[0,1]], [[0,0],[1,1]]),
"right" : ([[1,1],[1,1]], [[0,1],[0,1]], [[0,0],[1,1]]),
"front" : ([[0,1],[0,1]], [[0,0],[0,0]], [[0,0],[1,1]]),
"back" : ([[0,1],[0,1]], [[1,1],[1,1]], [[0,0],[1,1]])
}
return planes
def render_array(ary, highlight):
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
cube = make_cube()
for space in xrange(0, ary.shape[0]):
for column in xrange(0, ary.shape[1]):
for row in xrange(0, ary.shape[2]):
alpha = 0.01
if highlight[space,column,row] == 1:
alpha = 1
for side in cube:
(Xs, Ys, Zs) = (
np.asarray(cube[side][0])+space+space*0.2,
np.asarray(cube[side][2])+row+row*0.2,
np.asarray(cube[side][3])+column+column*0.2
)
ax.plot_surface(Xs, Ys, Zs, rstride=1, cstride=1, alpha=alpha)
highest = 0 # Make it look cubic
for size in ary.shape:
if size > highest:
highest = size
ax.set_xlim((0,highest))
ax.set_ylim((0,highest))
ax.set_zlim((0,highest))
ax.set_xlabel('Third dimension') # Meant to visualize ROW-MAJOR ordering
ax.set_ylabel('Row(s)')
ax.set_zlabel('Column(s)')
#plt.axis('off') # This also removes the axis labels... i want those...
#ax.set_axis_off() # this removes too much (also the labels)
# So I try this instead...
ax.set_xticks([]) # removes the ticks... great now the rest of it
ax.set_yticks([])
ax.set_zticks([])
#ax.grid(False) # this does nothing....
#ax.set_frame_on(False) # this does nothing....
plt.show()
def main():
subject = np.ones((3,4,3))
highlight = np.zeros(subject.shape) # Highlight a row
highlight[1,1,:] = 1
render_array(subject, highlight) # Show it
if __name__ == "__main__":
main()
aktualisieren dank der Antwort ist hier, was ich fehlte:
# Get rid of the panes
ax.w_xaxis.set_pane_color((1.0, 1.0, 1.0, 0.0))
ax.w_yaxis.set_pane_color((1.0, 1.0, 1.0, 0.0))
ax.w_zaxis.set_pane_color((1.0, 1.0, 1.0, 0.0))
# Get rid of the spines
ax.w_xaxis.line.set_color((1.0, 1.0, 1.0, 0.0))
ax.w_yaxis.line.set_color((1.0, 1.0, 1.0, 0.0))
ax.w_zaxis.line.set_color((1.0, 1.0, 1.0, 0.0))
Welche wird zusammen mit:
# Get rid of the ticks
ax.set_xticks([])
ax.set_yticks([])
ax.set_zticks([])
alles, aber die Etiketten ausblenden, wie illustriert in 3).
UPDATE
Ich habe gereinigt und bekam den Code in einen funktionierenden Zustand und machte es hier zur Verfügung: https://github.com/safl/ndarray_plot
Zusammen mit ein paar weiteren Beispielen hier: http://nbviewer.ipython.org/github/safl/ndarray_plot/blob/master/nb/ndap.ipynb
Nur eine Notiz Sie wissen zu lassen - später ausdrücklich eine ungewöhnliche (das heißt cool) einschließlich Anwendungsfall für andere wirklich hilfreich ist! – uhoh