前提
Pythonを用いて、3次元の散布図グラフを作成しようとしています。
そのうち2軸はstring型の単語を用い、1軸は離散的な値を用いたいと考えています。
matplotlibにて散布図のグラフを出そうとする際に以下のエラーメッセージが発生しました。
ValueError: could not convert string to float:
実現したいこと
・文字列を含むデータを3次元の散布図グラフに表したい。
・特に、3次元のグラフを3D plotを用いて、動かしたい
・データは以下のような形式
発生している問題・エラーメッセージ
python
1ValueError: could not convert string to float:
該当のソースコード
python
1from mpl_toolkits.mplot3d import Axes3D 2import matplotlib.pyplot as plt 3import pandas as pd 4x = df["要素1"] 5y = df["要素2"] 6z = df["要素3"] 7 8fig = plt.figure() 9ax = fig.add_subplot(projection='3d') 10ax.set_xlabel('要素1', fontsize =12) 11ax.set_ylabel('要素2', fontsize =12) 12ax.set_zlabel('要素3', fontsize =12) 13ax.scatter(x, y, z, c=z, cmap="plasma_r", s=50, alpha=1) 14 15plt.show()
試したこと
・2次元であれば、文字列のデータを含む散布図を作成することができています。
python
1from mpl_toolkits.mplot3d import Axes3D 2import matplotlib.pyplot as plt 3import pandas as pd 4x = df["要素1"] 5y = df["要素2"] 6 7fig = plt.figure() 8ax = fig.add_subplot(111) 9ax.set_xlabel('要素1', fontsize =12) 10ax.set_ylabel('要素2', fontsize =12) 11ax.scatter(x, y, c=z, cmap="plasma_r", alpha=0.75) 12 13plt.show()
・一度、全ての軸をstring型でない数値型で入力した後に、
set_xticklabels, set_yticklabelsで変換しましたが、値は要素3のため、上手く表現できず。
python
1fig = plt.figure() 2ax = fig.add_subplot(projection='3d') 3ax.set_xlabel('要素1', fontsize =12) 4ax.set_ylabel('要素2', fontsize =12) 5ax.set_zlabel('要素3', fontsize =12) 6ax.scatter(z, z, z, c=z, cmap="plasma_r", s=50, alpha=1) 7 8ax.set_xticklabels(x, fontsize =6) 9ax.set_yticklabels(y, fontsize =6) 10 11plt.show()
すみませんが、3次元で文字列の要素を含むグラフの表し方を教えて頂けないでしょうか。
回答1件