matplotlib ve python kullanarak bir 3d dağılım grafiği oluşturmaya çalışıyorum. Sorun şu şekildedir: 3d arsadaki noktaların ofseti, bunların tam olarak nerede olduğunu anlamak imkansız hale getirmektedir. Bu grafikte Matplotlib kullanarak offset olmaksızın 3d dağılım grafiği
, bu noktaları tam köşeler denk olmadığını gözlemleyin: Burada
inşa edilmiş grafiktir. Yani, grafiğe göre, veri setinde yer almayan 0B ile 1B ve 4S arasında bir nokta olduğunu gösterir (aşağıdaki MWE koduna bakınız). Ofsetin ayarlanması için yapılması gereken bir şey var mı?#!/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()
Bu çok mantıklı. Farklı görüntüleme açılarıyla koşmayı deneyeceğim ve sonra göreceğim. Teşekkürler. – tandem
3B grafikleri yapıyorum, genellikle, çok çeşitli görünümler, örn. -90 ila 90 arası 2 o adımda. Bu gerçekten "3Dness" i ortaya çıkarır ve perspektifle ilişkili ofsetleri büyük ölçüde azaltır. Açıkçası bu, kağıt üzerinde yayın yapıyorsanız iyi olmaz, ancak web yayıncılığı ve bununla iyi çalışabilir, ör. onu bir gif'e dönüştürmek – iayork
Ama, onu bir gif haline nasıl çevirirsiniz? bir örnek verebilir misin ? – tandem