我可以用文字而不是数字制作 3D 散点图吗?

Can I make a 3D scatter plot with words instead of numbers?

我正在为学校做一个项目,想在 3d 散点图中解释这些数据,但是当我 运行此代码:

import pandas as pd 
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

df = pd.read_csv('baseball2.csv')

fig = plt.figure()
ax = fig.add_subplot(111, projection = '3d')

x = ['Location']
y = ['Landing']
z = ['Speed']

ax.scatter(x, y, z)
ax.set_xlabel("Location")
ax.set_ylabel("Landing")
ax.set_zlabel("Speed")

plt.show()

这是不长的 CSV 文件:

Location, Landing, Speed,
1B, 3BF, 90,
1A, FLF, 93,
3B, 2B, 91,
2C, SRF, 92,
1C, P, 83,
2C, C, 85,
3A, FLF, 93,
2C, SRF, 84,
3A, SS, 93,
1C, CF, 92,
2B, FRF, 91,
3A, FLF, 90,
3A, FLF, 91,
1C, C, 91,
3A, C, 91,
2B, HR, 91,
2A, DRF, 92,
3B, SRF, 82,
1B, SCF, 82

散点图需要 (x, y) 坐标或其他数字位置信息。您的问题在术语上似乎自相矛盾,因为字符串不容易转换为距离。

您必须为每个标签定义一些指标。你可以用一个简单的查找值字典来做到这一点。

您可以将其绘制为 3D 散点图并使用 pseudo-numerical 值作为分类变量,但生成的图形将很难阅读。我推荐这样的 3D 条形图:

import matplotlib.pyplot as plt
import pandas as pd

fig = plt.figure(figsize=(10, 10))
ax = fig.gca(fc='white', projection='3d')

df = pd.read_csv('data_files/original_file.csv')
xy_data = [i for i in range(len(df[' Landing']))]

ax.bar3d(xy_data,xy_data, df[' Speed'],1,1, -df[' Speed'])
ax.set_xticklabels(df["Location"])
ax.set_yticklabels(df[" Landing"])

ax.set_xlabel("Location")
ax.set_ylabel("Landing")
ax.set_zlabel("Speed")
plt.show()

最后一个细节。在您的 csv 文件中,header 行中的 Landing 和 Speed 之前有一个前导空格。调用数据框列时请记住该空格,如我的代码所示。

附录 为了回应您的评论,这里是 3D 散点图的代码。两个图中的 xy_data 列表理解用于创建这些类型的图形所需的假数值,因为它们通常对连续变量进行操作。然后通过 set_xticklabels() 和 set_yticklabels().

将您的分类变量分配给这些数字占位符
import matplotlib.pyplot as plt
import pandas as pd

fig = plt.figure(figsize=(10, 10))
ax = fig.gca(fc='white', projection='3d')

df = pd.read_csv('data_files/original_file.csv')
xy_data = [i for i in range(len(df[' Landing']))]

ax.scatter3D(xy_data,xy_data, df[' Speed'], color = 'green')
ax.set_xticklabels(df["Location"])
ax.set_yticklabels(df[" Landing"])

ax.set_xlabel("Location")
ax.set_ylabel("Landing")
ax.set_zlabel("Speed")
plt.show()