Ich versuche, ein 3D-Streudiagramm mit Matplotlib und Python zu erstellen. Das Problem sieht wie folgt aus: Der Offset für die Punkte auf einem 3D-Plot macht es unmöglich zu verstehen, wo genau diese gehören. Hier3D Streudiagramm ohne Offset mit Matplotlib
ist der Graph, der gebaut wurde:
In diesem Diagramm beobachten, dass diese Punkte nicht genau mit den Eckpunkten zusammenfallen. Das heißt, gemäß dem Graphen zeigt es, dass ein Punkt irgendwo zwischen 0B und 1B und 4S existiert, der nicht in dem Datensatz enthalten ist (siehe Code MWE unten). Gibt es etwas, was getan werden muss, um den Offset einzustellen?
#!/usr/bin/env python
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
from mpl_toolkits.mplot3d import Axes3D
import string
from matplotlib import cm
import matplotlib
def plot_state_transition():
xTickMarks = ["-1B","0B", "1B", "2B", "3B"]#, "4B"]#, "1B3S", "2B2S"]
yTickMarks = ["-1S","0S", "1S", "2S", "3S", "4S"]
zTickMarks = ["0", "0.6", "0.65", "0.9", "1.15"]
matplotlib.rc('font', serif='Helvetica Neue')
matplotlib.rc('text', usetex='false')
matplotlib.rcParams.update({'font.size': 10})
fig = plt.figure(figsize=(11.69,4.88)) # for landscape
axes1 = fig.add_subplot(111, projection='3d')
savename = "state-transition.png"
tup = []
plt.grid(True,linestyle='-',color='0.75')
X_AXIS = ['2B', '2B', '1B', '2B', '2B', '2B', '1B', '2B']
Y_AXIS = ['0S', '2S', '3S', '2S', '2S', '2S', '3S', '2S']
Z_AXIS = ['0.6', '0.6', '0.6', '0.6', '0.6', '0.9', '0.9', '0.9']
s = [12.900648500000001, 12.705360163934426, 13.021028032786887, 13.258014354838707, 14.418979838709676, 17.092295806451613, 15.625246451612906, 17.484319354838711]
x = [xTickMarks.index(i) for i in X_AXIS]
y = [yTickMarks.index(i) for i in Y_AXIS]
z = [zTickMarks.index(i) for i in Z_AXIS]
s = s
axes1.scatter(x, y, z, c='r', marker='o')
axes1.set_xlim((0, len(xTickMarks)-1))
axes1.set_ylim((0, len(yTickMarks)-1))
axes1.set_zlim((0, len(zTickMarks)-1))
axes1.set_xticks(xrange(len(xTickMarks)))
axes1.set_yticks(xrange(len(yTickMarks)))
axes1.set_zticks(xrange(len(zTickMarks)))
axes1.set_xticklabels(xTickMarks)
axes1.set_yticklabels(yTickMarks)
axes1.set_zticklabels(zTickMarks)
axes1.set_ylabel('Small cores')
axes1.set_zlabel('Frequency')
axes1.set_xlabel('Big cores')
axes1.xaxis.grid(True)
figsize=(11.69,8.27) # for landscape
fig.savefig(savepath + savename, bbox_inches='tight', dpi=300, pad_inches=0.1)
plt.clf()
def main():
plot_state_transition()
if __name__ == "__main__":
main()
Das macht sehr viel Sinn. Ich werde versuchen, durch verschiedene Blickwinkel zu laufen und dann sehen. Vielen Dank. – tandem
Wenn ich 3D-Plots mache, animiere ich oft die Handlung durch eine große Auswahl von Ansichten, z. von -90 bis 90 um 2 Schritte. Das bringt die "3Dness" wirklich heraus und reduziert das Problem der perspektivischen Offsets erheblich. Natürlich ist das nicht gut, wenn Sie auf dem Papier veröffentlichen, aber Web-Publishing und so weiter kann gut damit arbeiten, z. verwandel es in ein gif – iayork
Aber, wie verwandelst du es in ein gif? Kannst du ein Beispiel geben ? – tandem