1
2

Pythonで3次元プロットをして散布図を作ろう

Last updated at Posted at 2023-12-28

概要

pythonで3次元の散布図を作成します。

事前準備

今回Anacondaで実行しています。そのため先にAnacondaのインストールをお願い致します。

Anacondaがインストールされている方はこちら

Excelで拡張子がcsvとなっているファイルを作成してください。その中に分析したいデータを入れてください。
image.png

身内の話になりますが、本来統計学で使用したCollege Analysisを使用したときA列の1行目には空白ですが、今回使用するコードでは、A列に1行目に題名が必要です。今回私だと、下に県名が書いてあるのでA列1行目に県名と書いてください。

そしてこれを作ったら適当にどこでもいいので保存してください。

保存した場所は覚えておくこと!!

コード解説

最初にしてもしなくてもいいのですが、新規ファイルを押して新しいファイルを作成してください。(既に何も書いないまっさらなファイルがある人はする必要性はないです。)
image.png
最初にパッケージをインポートしてください。これをインポートしないと使えないです。

#パッケージをインポート
from matplotlib import pyplot as plt
import pandas as pd

次に軸の名前などに対して日本語が使えるようにします。

#日本語フォントを使えるようにする
plt.rcParams['font.family'] = 'Meiryo'

今回私の環境ではこの行を書かなくても日本語表示されているため、正直いらないですが、どのような条件で英語表記や□文字になるのかわからないため、一応念のため書いておきます。(いらない人はけしてくださっても構いません。)

次にcsvファイルを読み込みます

#csvの読み込み
df = pd.read_csv(r"C:\Users\hakue\OneDrive\デスクトップ\統計学Ⅱ\analys-data.csv", encoding="utf-8")

保存した先のパスをコピーでここにもって来るのですが、注意点としてそのまま持ってくると、"C:\Users\hakue\OneDrive\デスクトップ\統計学Ⅱ\analys-data.csv"となり\がエスケープ文字になってしまうため最初にrを付けてください。
つまり

df = pd.read_csv(r"ここを自分のおいてあるファイルパスにする", encoding="utf-8")

という事です。
次に、プロットする図を製作していこうと思います。

#3bプロットをする新たな図(Fiugre)を作成する
fig = plt.figure()
ax =fig.add_subplot(111, projection = "3d")
ax.scatter(df["主成分1"], df["皮の薄さ"],df["主成分3"], color=colorlist)

最後の一文の主成分1皮の薄さ主成分3は自身が置いたcsvファイルの名前に変えてください。
以下のようにcsvファイルの行名と一致させることが重要です。
image.png

ここで全角・半角で名前が一致しないエラーを吐く場合があるので、できるだけcsvファイルの行名をコピーした方が安全です。

軸名と点のプロットについて

#軸の名前を付ける
ax.set_xlabel('X軸の名前', fontdict={'fontsize': 10, 'fontweight': 'medium'})
ax.set_ylabel('y軸の名前', fontdict={'fontsize': 10, 'fontweight': 'medium'})
ax.set_zlabel('z軸の名前', fontdict={'fontsize': 10, 'fontweight': 'medium'})

#県名をプロットされた点に対して名前を付ける
for i in range(len(df)):
    ax.text(df.iloc[i]['主成分1'], df.iloc[i]['皮の薄さ'], df.iloc[i]['主成分3'], df.iloc[i]["県名"])

ここでは、x軸、y軸、z軸それぞれに対して軸名とプロットされた点に対して、県名を付けてどの点がどの県なのかを判別しています。[i]の後ろの[主成分1]のところは、対応する行名に変えてください。

結果

image.png

応用

プロットされたときのデフォルトの色は青色ですが、色を変えたい人は、

colorlist = ["#FFA500"] #オレンジ色

を加えて

#3bプロットをする新たな図(Fiugre)を作成する
fig = plt.figure()
ax =fig.add_subplot(111, projection = "3d")
ax.scatter(df["主成分1"], df["皮の薄さ"],df["主成分3"], color=colorlist)

最後にcolor=colorlistを加えてください。
そうすることで色を変える事ができます。

全体コード

#パッケージをインポート

from matplotlib import pyplot as plt
import pandas as pd

#日本語フォントを使えるようにする
plt.rcParams['font.family'] = 'Meiryo'

#csvの読み込み
df = pd.read_csv(r"C:\Users\hakue\OneDrive\デスクトップ\統計学Ⅱ\analys-data.csv", encoding="utf-8")

colorlist = ["#FFA500"]

#3bプロットをする新たな図(Fiugre)を作成する
fig = plt.figure()
ax =fig.add_subplot(111, projection = "3d")
ax.scatter(df["主成分1"], df["皮の薄さ"],df["主成分3"], color=colorlist)

#軸の名前を付ける
ax.set_xlabel('X軸の名前', fontdict={'fontsize': 10, 'fontweight': 'medium'})
ax.set_ylabel('y軸の名前', fontdict={'fontsize': 10, 'fontweight': 'medium'})
ax.set_zlabel('z軸の名前', fontdict={'fontsize': 10, 'fontweight': 'medium'})

#県名をプロットされた点に対して名前を付ける
for i in range(len(df)):
    ax.text(df.iloc[i]['主成分1'], df.iloc[i]['皮の薄さ'], df.iloc[i]['主成分3'], df.iloc[i]["県名"])

最後に

初心者が書いてあるのでもっと効率的に書く方法があるかもしれません。その時は教えてください。

一応Gitに上げたものを置いておきます。

ここまで読んでいただきありがとうございます。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2