在用python读取excel中的x,y,z的散点图数据绘制三维散点图时,碰到三维坐标图的坐标轴间距不一样的问题,如下图所示。
原代码如下:
import numpy as np from mpl_toolkits import mplot3d import matplotlib.tri as mtri import matplotlib.pyplot as plt import pandas as pd a=pd.read_csv("E:\\college Files\\22 summer vacation\\数学建模\\国赛往年试题\\21年\\A\\附件1.csv",encoding='gbk') X=a['X坐标(米)'] Y=a['Y坐标(米)'] Z=a['Z坐标(米)'] fig_1 = plt.figure(figsize=(10,5)) ax1 = fig_1.add_subplot(111, projection='3d') ax1.set_xlabel('X Label') ax1.set_ylabel('Y Label') ax1.set_zlabel('Z Label') ax1.scatter(X, Y, Z,) plt.show()
excel表中的数据如下图所示
程序运行后画出来的图像如图所示:
可以看到X,Y的坐标轴间距是100,而Z轴方向的间距是20,这使得画出来的图像看上去比实际中要瘦长。针对于这个问题,可以使用
ax1.set_xticks([]) ax1.set_yticks([]) ax1.set_zticks([])
方法来设定三个坐标轴的间距,其中ax1为所创建的图像名
官方文档内容如图所示:
可以看到可以使用ticks参数来设定间隔
添加如下代码:
ax1.set_xticks([-200,-100,0,100,200]) ax1.set_yticks([-200,-100,0,100,200]) ax1.set_zticks([-300,-200,-100])
得到绘制出来的图形为
有了一定的改善,但是还是不像实际的效果 ,观察发现即使设置等距,在实际显示出来的效果中,Z表示相同距离的长度是X,Y表示相同距离长度的两倍左右,将Z的大小除以2,发现图像形状与实际效果相符合:
但是坐标无法匹配,z的图表表现值是实际值的1/2:
好像逐渐意识到了什么,发现只需要将z方向的间距放大就可以实现形状的一致性:
当然,对于为什么间距会是这样子依然还有待进一步的学习
总结,首先要使用set_ticks函数使得坐标轴等间距,在此基础上根据实际长度设置图片显示比例,则可得到正常的图形显示