私は、matplotlibとpythonを使って3d散布図を作成しようとしています。 問題は次のようになります。3Dプロット上の点のオフセットは、これらの要素が正確にどこにあるのか理解できなくなっています。これらの点は、まさに頂点と一致しないことがわかり、このグラフでmatplotlibを使用したオフセットのない3次元散布図
:ここ
が建設されたグラフです。つまり、グラフによれば、データセットに含まれていない0Bと1Bと4Sの間にポイントが存在することを示しています(下記のコードMWEを参照)。オフセットを設定するために必要なことはありますか?
#!/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()
これはかなり意味があります。私はさまざまな視野角で走ってみて、それから見てみましょう。ありがとう。 – tandem
私が3Dプロットをしているとき、私はしばしばプロットをアニメーション化して、幅広いビューを表示します。 -90°から90°まで2°ずつシフトします。それは本当に「3Dness」を引き出し、パースペクティブなオフセットの問題を大幅に軽減します。明らかに紙に公開しているのであれば、それは良いことではありませんが、ウェブ出版などでうまくいくことができます。これをgifに変換する – iayork
しかし、それをどのようにGIFに変換しますか?あなたは例を挙げることができますか? – tandem