如何确定3D散点图的中心?z轴取值问题求解
如何确定3D散点图的中心(z轴取值问题)
我一直在尝试绘制3D散点图的中心,但在确定z轴取值时遇到问题,希望找到能让中心落在散点图上的z轴值,请问如何确定3D散点图的中心?
第一次尝试代码
import xlrd import numpy as np import pandas as pd from pandas import DataFrame import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D # axes = [5, 5, 5] # Create Data # data = np.ones(axes, dtype=np.bool) df=pd.read_csv('wr.csv') df=df.sample(frac=1) # print(df.head()) fig = plt.figure() #---------------1st plt------------------------- ax = fig.add_subplot(projection='3d') ax.scatter(df.index, df['volatile acidity'], np.ones(df.shape[0]), s=5,color='red') ax.scatter(np.mean(df.index),np.mean(df['volatile acidity']),1,color='black',s=200)
图1

第二次尝试代码
import xlrd import numpy as np import pandas as pd from pandas import DataFrame import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D # axes = [5, 5, 5] # Create Data # data = np.ones(axes, dtype=np.bool) df=pd.read_csv('wr.csv') df=df.sample(frac=1) # print(df.head()) fig = plt.figure() #---------------1st plt------------------------- ax = fig.add_subplot(projection='3d') #ax.scatter(df.index, df['volatile acidity'], np.ones(df.shape[0]), s=5,color='red') #ax.scatter(np.mean(df.index),np.mean(df['volatile acidity']),1,color='black',s=200) ax.scatter(df.index, df['volatile acidity'], np.square(df['volatile acidity']), s=5,color='black') ax.scatter(np.mean(df.index),np.mean(df['volatile acidity']),1,color='orange',s=20)
图2

解决方法
要让中心点落在3D散点图的点集上,核心是让中心的z轴值与散点z轴数据的统计中心匹配,具体操作如下:
对齐散点z轴的取值逻辑
- 第一次尝试中所有散点z值固定为1,所以中心z值设为1是正确的(图1里的黑色大圆点就是准确的中心)。
- 第二次尝试中散点z值是
volatile acidity的平方,此时不能再硬设z=1,必须用z轴数据的均值作为中心z值。
修改中心绘制代码
计算z轴数据的均值,替换硬编码的z值:# 计算散点z轴数据的均值 z_mean = np.mean(np.square(df['volatile acidity'])) # 绘制匹配的中心 ax.scatter(np.mean(df.index), np.mean(df['volatile acidity']), z_mean, color='orange', s=200)通用逻辑总结
3D散点图的中心是三个轴数据的均值组成的坐标点:- x轴中心:
np.mean(df.index) - y轴中心:
np.mean(df['volatile acidity']) - z轴中心:
np.mean(散点的z轴数据数组)
- x轴中心:
按此逻辑设置,中心点会准确落在散点图的统计中心位置。
内容的提问来源于stack exchange,提问作者ihatecoding
相关产品推荐
相关产品推荐

