簡體   English   中英

我可以用單詞而不是數字制作 3D scatter plot 嗎?

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

我正在為學校做一個項目,並希望在 3d 散點圖中解釋這些數據,但是當我運行此代碼時,我不斷收到“ValueError:無法將字符串轉換為浮點數:'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

散點圖 plot 需要 (x, y) 坐標或其他數字位置信息。 您的問題在術語上似乎是矛盾的,因為字符串不容易轉換為距離。

您必須為每個 label 定義一些指標。 你可以用一個簡單的查找值字典來做到這一點。

您可以將其作為 3D 散布 plot 並為您的分類變量使用偽數值,但生成的數字將很難閱讀。 我推薦一個 3D 酒吧 plot 像這樣:

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 and Speed 之前有一個前導空格。 當您調用 dataframe 列時,請記住該空格,如我的代碼所示。

附錄為了回應您的評論,這里是 3D 分散 plot 的代碼。 兩個圖中的 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()

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM