質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

7887閲覧

3D 散布図でhueを用いてグループごとの色分けやlegendの表示はできますか

teruque

総合スコア6

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

1グッド

1クリップ

投稿2020/03/15 00:39

編集2020/03/15 00:47

前提・実現したいこと

csvファイルから読み込んだデータを用いて3D散布図を描きたいのですが、データのグループが多いのでhueを用いてグループごとに色分けやlegendの作成をしたいと思っています。
今のところ簡略化したサンプルデータで練習しています。
2Dの散布図ならできたのですが、3Dにしようとするとできません。
サンプルデータcsvファイルの構成はirisデータの改変です(今回はPC4のデータは不要)。
各列の1行目は下記の通り名前を変えています。
PC1, PC2, PC3, PC4, sample

解決策をご教示頂けないでしょうか。

発生している問題・エラーメッセージ

エラーメッセージ AttributeError: 'Line2D' object has no property 'hue' ###データ PC1 PC2 PC3 PC4 sample 5.1 3.5 1.4 0.2 sample1 4.9 3 1.4 0.2 sample1 4.7 3.2 1.3 0.2 sample1 4.6 3.1 1.5 0.2 sample1 5 3.6 1.4 0.2 sample1 5.4 3.9 1.7 0.4 sample1 4.6 3.4 1.4 0.3 sample1 5 3.4 1.5 0.2 sample1 4.4 2.9 1.4 0.2 sample1 4.9 3.1 1.5 0.1 sample1 5.4 3.7 1.5 0.2 sample1 4.8 3.4 1.6 0.2 sample1 4.8 3 1.4 0.1 sample1 4.3 3 1.1 0.1 sample1 5.8 4 1.2 0.2 sample1 5.7 4.4 1.5 0.4 sample1 5.4 3.9 1.3 0.4 sample1 5.1 3.5 1.4 0.3 sample1 5.7 3.8 1.7 0.3 sample1 5.1 3.8 1.5 0.3 sample1 5.4 3.4 1.7 0.2 sample1 5.1 3.7 1.5 0.4 sample1 4.6 3.6 1 0.2 sample1 5.1 3.3 1.7 0.5 sample1 4.8 3.4 1.9 0.2 sample1 5 3 1.6 0.2 sample1 5 3.4 1.6 0.4 sample1 5.2 3.5 1.5 0.2 sample1 5.2 3.4 1.4 0.2 sample1 4.7 3.2 1.6 0.2 sample1 4.8 3.1 1.6 0.2 sample1 5.4 3.4 1.5 0.4 sample1 5.2 4.1 1.5 0.1 sample1 5.5 4.2 1.4 0.2 sample1 4.9 3.1 1.5 0.2 sample1 5 3.2 1.2 0.2 sample1 5.5 3.5 1.3 0.2 sample1 4.9 3.6 1.4 0.1 sample1 4.4 3 1.3 0.2 sample1 5.1 3.4 1.5 0.2 sample1 5 3.5 1.3 0.3 sample1 4.5 2.3 1.3 0.3 sample1 4.4 3.2 1.3 0.2 sample1 5 3.5 1.6 0.6 sample1 5.1 3.8 1.9 0.4 sample1 4.8 3 1.4 0.3 sample1 5.1 3.8 1.6 0.2 sample1 4.6 3.2 1.4 0.2 sample1 5.3 3.7 1.5 0.2 sample1 5 3.3 1.4 0.2 sample1 7 3.2 4.7 1.4 sample2 6.4 3.2 4.5 1.5 sample2 6.9 3.1 4.9 1.5 sample2 5.5 2.3 4 1.3 sample2 6.5 2.8 4.6 1.5 sample2 5.7 2.8 4.5 1.3 sample2 6.3 3.3 4.7 1.6 sample2 4.9 2.4 3.3 1 sample2 6.6 2.9 4.6 1.3 sample2 5.2 2.7 3.9 1.4 sample2 5 2 3.5 1 sample2 5.9 3 4.2 1.5 sample2 6 2.2 4 1 sample2 6.1 2.9 4.7 1.4 sample2 5.6 2.9 3.6 1.3 sample2 6.7 3.1 4.4 1.4 sample2 5.6 3 4.5 1.5 sample2 5.8 2.7 4.1 1 sample2 6.2 2.2 4.5 1.5 sample2 5.6 2.5 3.9 1.1 sample2 5.9 3.2 4.8 1.8 sample2 6.1 2.8 4 1.3 sample2 6.3 2.5 4.9 1.5 sample2 6.1 2.8 4.7 1.2 sample2 6.4 2.9 4.3 1.3 sample2 6.6 3 4.4 1.4 sample2 6.8 2.8 4.8 1.4 sample2 6.7 3 5 1.7 sample2 6 2.9 4.5 1.5 sample2 5.7 2.6 3.5 1 sample2 5.5 2.4 3.8 1.1 sample2 5.5 2.4 3.7 1 sample2 5.8 2.7 3.9 1.2 sample2 6 2.7 5.1 1.6 sample2 5.4 3 4.5 1.5 sample2 6 3.4 4.5 1.6 sample2 6.7 3.1 4.7 1.5 sample2 6.3 2.3 4.4 1.3 sample2 5.6 3 4.1 1.3 sample2 5.5 2.5 4 1.3 sample2 5.5 2.6 4.4 1.2 sample2 6.1 3 4.6 1.4 sample2 5.8 2.6 4 1.2 sample2 5 2.3 3.3 1 sample2 5.6 2.7 4.2 1.3 sample2 5.7 3 4.2 1.2 sample2 5.7 2.9 4.2 1.3 sample2 6.2 2.9 4.3 1.3 sample2 5.1 2.5 3 1.1 sample2 5.7 2.8 4.1 1.3 sample2 6.3 3.3 6 2.5 sample3 5.8 2.7 5.1 1.9 sample3 7.1 3 5.9 2.1 sample3 6.3 2.9 5.6 1.8 sample3 6.5 3 5.8 2.2 sample3 7.6 3 6.6 2.1 sample3 4.9 2.5 4.5 1.7 sample3 7.3 2.9 6.3 1.8 sample3 6.7 2.5 5.8 1.8 sample3 7.2 3.6 6.1 2.5 sample3 6.5 3.2 5.1 2 sample3 6.4 2.7 5.3 1.9 sample3 6.8 3 5.5 2.1 sample3 5.7 2.5 5 2 sample3 5.8 2.8 5.1 2.4 sample3 6.4 3.2 5.3 2.3 sample3 6.5 3 5.5 1.8 sample3 7.7 3.8 6.7 2.2 sample3 7.7 2.6 6.9 2.3 sample3 6 2.2 5 1.5 sample3 6.9 3.2 5.7 2.3 sample3 5.6 2.8 4.9 2 sample3 7.7 2.8 6.7 2 sample3 6.3 2.7 4.9 1.8 sample3 6.7 3.3 5.7 2.1 sample3 7.2 3.2 6 1.8 sample3 6.2 2.8 4.8 1.8 sample3 6.1 3 4.9 1.8 sample3 6.4 2.8 5.6 2.1 sample3 7.2 3 5.8 1.6 sample3 7.4 2.8 6.1 1.9 sample3 7.9 3.8 6.4 2 sample3 6.4 2.8 5.6 2.2 sample3 6.3 2.8 5.1 1.5 sample3 6.1 2.6 5.6 1.4 sample3 7.7 3 6.1 2.3 sample3 6.3 3.4 5.6 2.4 sample3 6.4 3.1 5.5 1.8 sample3 6 3 4.8 1.8 sample3 6.9 3.1 5.4 2.1 sample3 6.7 3.1 5.6 2.4 sample3 6.9 3.1 5.1 2.3 sample3 5.8 2.7 5.1 1.9 sample3 6.8 3.2 5.9 2.3 sample3 6.7 3.3 5.7 2.5 sample3 6.7 3 5.2 2.3 sample3 6.3 2.5 5 1.9 sample3 6.5 3 5.2 2 sample3 6.2 3.4 5.4 2.3 sample3 5.9 3 5.1 1.8 sample3 ### 該当のソースコード import seaborn as sns import pandas as pd import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D df = pd.read_csv(r"ファイルパス",") fig = pyplot.figure() ax = Axes3D(fig) X=df["PC1"] Y=df["PC2"] Z=df["PC3"] p=ax.plot(X, Y, Z, hue=df["sample"] ) plt.show() ### 試したこと 一昨日pythonに初めて触った超初心者なので、エラーの意味を調べてもよくわかりませんでした。。。すみません。 ### 補足情報(FW/ツールのバージョンなど) python 3.7 seaborn 0.10.0 pandas 1.0.1 matplotlib 3.2.0
s.k👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

グループごとに色分けやlegendの作成をしたいと思っています。

以下のように自力でグループ分けするとよいです。

Python

1import pandas as pd 2import matplotlib.pyplot as plt 3from mpl_toolkits.mplot3d import Axes3D 4import matplotlib.colors as mcolors 5 6df = pd.read_csv('inp.csv', sep='\s+', skipinitialspace=True) 7 8fig = plt.figure() 9ax = Axes3D(fig) 10 11samples = sorted(set(df['sample'])) 12colors = list(mcolors.BASE_COLORS.keys()) # 基本的な色 13 14# sample毎に描画 15for idx, sample in enumerate(samples): 16 df2 = df[df['sample'] == sample] 17 X = df2["PC1"] 18 Y = df2["PC2"] 19 Z = df2["PC3"] 20 p=ax.scatter(X, Y, Z, c=colors[idx], label=sample) 21 22plt.legend() 23plt.show()

イメージ説明

投稿2020/03/15 01:28

can110

総合スコア38341

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

teruque

2020/03/15 01:56

早速のご回答ありがとうございます。 お陰様で無事に表示できました! 本命データはグループ数が多いのでカラーの多様性を上げることで全てのグループを表示できました。 お示し頂いたコードの意味はまだ理解できていませんが、自習してきちんと理解したいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問