np.unique(..., return_inverse=True)을 사용하면 각 문자열에 대한 대표 int를 얻을 수 있습니다. np.unique
가에서 가장 2**31
고유의 문자열을 처리 할 수 있습니다 예를 들어,
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
는 DTYPE int32
이 있는지 확인합니다.
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