我正在为学校做一个项目,想在3d散点图中解释此数据,但是在运行此代码时,我不断收到“ ValueError:无法将字符串转换为float:'Location'”:
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
您可以将其作为3D散点图进行处理,并为分类变量使用伪数值,但结果图将非常难以阅读。我推荐这样的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文件中,标题行中的着陆和速度前有一个领先的空格。调用数据框列时,请记住该空格,如我的代码所示。
附录为了回应您的评论,以下是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()
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句