Python中matplotlib改变三维坐标图坐标点间隔的问题

在用python读取excel中的x,y,z的散点图数据绘制三维散点图时,碰到三维坐标图的坐标轴间距不一样的问题,如下图所示。

Python中matplotlib改变三维坐标图坐标点间隔的问题_第1张图片

        原代码如下:

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表中的数据如下图所示

Python中matplotlib改变三维坐标图坐标点间隔的问题_第2张图片

 程序运行后画出来的图像如图所示:

Python中matplotlib改变三维坐标图坐标点间隔的问题_第3张图片

         

可以看到X,Y的坐标轴间距是100,而Z轴方向的间距是20,这使得画出来的图像看上去比实际中要瘦长。针对于这个问题,可以使用

ax1.set_xticks([])
ax1.set_yticks([])
ax1.set_zticks([])

方法来设定三个坐标轴的间距,其中ax1为所创建的图像名

官方文档内容如图所示:

Python中matplotlib改变三维坐标图坐标点间隔的问题_第4张图片

 可以看到可以使用ticks参数来设定间隔

添加如下代码:

ax1.set_xticks([-200,-100,0,100,200])
ax1.set_yticks([-200,-100,0,100,200])
ax1.set_zticks([-300,-200,-100])

得到绘制出来的图形为

Python中matplotlib改变三维坐标图坐标点间隔的问题_第5张图片

有了一定的改善,但是还是不像实际的效果 ,观察发现即使设置等距,在实际显示出来的效果中,Z表示相同距离的长度是X,Y表示相同距离长度的两倍左右,将Z的大小除以2,发现图像形状与实际效果相符合:

Python中matplotlib改变三维坐标图坐标点间隔的问题_第6张图片

但是坐标无法匹配,z的图表表现值是实际值的1/2:

Python中matplotlib改变三维坐标图坐标点间隔的问题_第7张图片

 好像逐渐意识到了什么,发现只需要将z方向的间距放大就可以实现形状的一致性:

Python中matplotlib改变三维坐标图坐标点间隔的问题_第8张图片

当然,对于为什么间距会是这样子依然还有待进一步的学习

总结,首先要使用set_ticks函数使得坐标轴等间距,在此基础上根据实际长度设置图片显示比例,则可得到正常的图形显示

你可能感兴趣的:(matplotlib,python)