您可以使用np.unique(..., return_inverse=True)獲取每個字符串的代表性整數。例如,
In [117]: uniques, X = np.unique(['foo', 'baz', 'bar', 'foo', 'baz', 'bar'], return_inverse=True)
In [118]: X
Out[118]: array([2, 1, 0, 2, 1, 0])
注意X
具有D型int32
,作爲np.unique
可以處理最多2**31
唯一的字符串。
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import mpl_toolkits.mplot3d.axes3d as axes3d
N = 12
arr = np.arange(N*2).reshape(N,2)
words = np.array(['foo', 'bar', 'baz', 'quux', 'corge'])
df = pd.DataFrame(words[arr % 5], columns=list('XY'))
df['Z'] = np.linspace(1, 1000, N)
Z = np.log10(df['Z'])
Xuniques, X = np.unique(df['X'], return_inverse=True)
Yuniques, Y = np.unique(df['Y'], return_inverse=True)
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1, projection='3d')
ax.scatter(X, Y, Z, s=20, c='b')
ax.set(xticks=range(len(Xuniques)), xticklabels=Xuniques,
yticks=range(len(Yuniques)), yticklabels=Yuniques)
plt.show()
你會如何繪製點,而數字座標?我不明白你怎麼會認爲這不會是一個問題。 – M4rtini
是什麼?在X和Y軸上創建與在X和Y陣列中找到的不同字符串一樣多的元素。對於X和Y中的每個元素,繪製Z軸的Z值。這真的不那麼難。 – elelias
不,它不是那麼難,但它是一個足夠困難的分散不會自動爲你。這聽起來像你知道解決方案,你是否試圖做你剛剛說的? – M4rtini