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

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

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

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

Python 3.x

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

Q&A

解決済

1回答

2716閲覧

3次元の散布図が描きたい

Male_soprano

総合スコア10

Matplotlib

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

Python 3.x

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

0グッド

0クリップ

投稿2020/10/09 10:23

編集2020/10/09 11:22

前提・実現したいこと

Test.csvのうちA列をX軸, B列をY軸,C列をZ軸,D列を凡例とした3次元の散布図を描きたいのですが,以下のエラーメッセージが出てきました.これを解決し,描画に持っていくまでの過程についてお知恵をお貸し頂けますと幸いです.宜しくお願い致します.

該当のソースコード

python

1#!/usr/bin/python 2# -*- coding: utf-8 -*- 3import matplotlib.pyplot as plt 4import pandas as pd 5import seaborn as sns 6from mpl_toolkits.mplot3d import Axes3D 7df = pd.read_csv("Test.csv") 8 9fig, ax = plt.subplots() 10ax.set_xlim(4, 12) # x軸の表示範囲 11ax.set_ylim(8, 13) # y軸の表示範囲 12ax.set_zlim(100, 110) # z軸の表示範囲 13ax.set_xlabel("A", fontsize=10) # x軸ラベル 14ax.set_ylabel("B", fontsize=10) # y軸ラベル 15ax.set_xlabel("C", fontsize=10) # x軸ラベル 16 17ax.grid() # 目盛線の表示 18ax.tick_params(labelsize=10) # 目盛線のラベルサイズ 19 20sns.scatterplot(x="A", y="B", z="C", hue="D", data=df, ax=ax) 21#ax.get_legend().remove() 22ax.legend(bbox_to_anchor=(1.0, 0.05), loc='lower left', fontsize=10, ncol=1, borderaxespad=0, frameon =False) 23 24sns.set_style("darkgrid") 25 26#グラフの枠を作っていく 27fig = plt.figure() 28ax = Axes3D(fig) 29 30ax.plot(sns.scatterplot,marker="o",linestyle='None') 31 32#最後に.show()を書いてグラフ表示 33plt.show()

エラーメッセージ

Traceback (most recent call last): File "csv_3D_test.py", line 12, in <module> ax.set_zlim(100, 110) # z軸の表示範囲 AttributeError: 'AxesSubplot' object has no attribute 'set_zlim'

使用ファイル1

Test.csv

1A,B,C,D 24.68,11.85431,106,α 34.73,12.50193,109,β 44.87,12.52497,109,γ 54.87,12.48392,109,α 64.87,12.48392,109,γ 74.87,12.48392,109,α 84.87,12.48392,109,β 94.87,12.48392,109,β 104.87,12.51094,109,θ 114.87,12.52497,109,θ

補足情報(FW/ツールのバージョンなど)

macOS10.15.4 Python3.7.3 Atom

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

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

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

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

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

meg_

2020/10/09 10:55

エラーメッセージに「ax.set_zlim(8, 12) # z軸の表示範囲」とありますが、これは質問のコードにはありません。実際に実行したコードとエラーメッセージを提示いただかないと回答出来ません。
meg_

2020/10/09 11:18

下記部分でもエラーが出ますが、このコードは何を参考に書かれたコードですか? > sns.scatterplot(x="A", y="B", z="C", hue="D", data=df, ax=ax) > AttributeError: 'PathCollection' object has no property 'z'
Male_soprano

2020/10/09 11:25

正直に申しますと,何も参考にする事なく従来の2Dのグラフを描画するコードに何も考えず追記しただけです.(Documentを見たら2Dのみに対応している事に気づきました)
guest

回答1

0

ベストアンサー

下記コードでエラーは出なくなりましたが、質問者さんが望むグラフになっていますでしょうか?

Python

1import matplotlib.pyplot as plt 2import pandas as pd 3import seaborn as sns 4from mpl_toolkits.mplot3d import Axes3D 5df = pd.read_csv("Test.csv") 6 7fig = plt.figure() 8ax = Axes3D(fig) 9 10ax.set_xlim(4, 12) # x軸の表示範囲 11ax.set_ylim(8, 13) # y軸の表示範囲 12ax.set_zlim(100, 110) # z軸の表示範囲 13ax.set_xlabel("A", fontsize=10) # x軸ラベル 14ax.set_ylabel("B", fontsize=10) # y軸ラベル 15ax.set_xlabel("C", fontsize=10) # x軸ラベル 16 17ax.grid() # 目盛線の表示 18ax.tick_params(labelsize=10) # 目盛線のラベルサイズ 19 20for i in df['D'].unique(): 21 ax.plot(df[df['D']==i]['A'], df[df['D']==i]['B'], df[df['D']==i]['C'], marker="o", linestyle='None', label=i) 22 23ax.legend(bbox_to_anchor=(1.0, 0.05), loc='lower left', fontsize=10, ncol=1, borderaxespad=0, frameon =False) 24 25sns.set_style("darkgrid") 26 27#最後に.show()を書いてグラフ表示 28plt.show()

イメージ説明

投稿2020/10/09 11:25

編集2020/10/10 09:23
meg_

総合スコア10760

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

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

Male_soprano

2020/10/09 11:43

有難うございます.もしも可能であれば,D列に記載されている凡例がどこかに表示されている事と,αβγθでプロットの色が異なっているととても嬉しいです.
meg_

2020/10/09 11:52

画像を差し替えました。プログラム上ではちゃんと表示されていました。
meg_

2020/10/09 12:00

色を変えました。
Male_soprano

2020/10/09 13:21

すみません,何度か試してみたのですが凡例が見えません. 上記のコードで出力されますでしょうか?
meg_

2020/10/09 13:39

jupyter labで実行した結果が回答の画像となります。
Male_soprano

2020/10/09 14:05

再現できました,有難うございます. 凡例の情報のうち,αβγθ一つずつのみに色を当てるようにするにはコードをどのように書き換えれば宜しいでしょうか?
meg_

2020/10/10 01:08

> 凡例の情報のうち,αβγθ一つずつのみに色を当てる どういうことでしょうか? 手書きでも良いので欲しいグラフを質問に追記してください。
Male_soprano

2020/10/10 10:18

確認しました.有難うございました.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問