🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Matplotlib

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

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

2回答

808閲覧

matplotlib python 三次元で点と点を繋げる

11390

総合スコア20

Matplotlib

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

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2019/12/20 09:20

以前質問した関連についてのプログラムです。
10種類のテキストファイルを読み込んで、[]の格納して表示するプログラムとなっています。データは今(X、Z)の二次元配列です。

import matplotlib.pyplot as plt import os import tkinter from tkinter import messagebox from tkinter import filedialog root = tkinter.Tk() root.title('微小山') #タイトル root.geometry('400x200') #サイズ 横x縦 messagebox.showinfo('select','測定データ') fileType = [('テキストァイル','*.txt')] #ファイルタイプを指定 iniDir1 = os.path.abspath(os.path.dirname(__file__)) #初期表示フォルダ filepath1 = filedialog.askopenfilename(filetypes=fileType,initialdir = iniDir1) messagebox.showinfo('選択したファイル',filepath1) fileType = [('テキストァイル','*.txt')] #ファイルタイプを指定 iniDir2 = os.path.abspath(os.path.dirname(__file__)) #初期表示フォルダ filepath2 = filedialog.askopenfilename(filetypes=fileType,initialdir = iniDir2) messagebox.showinfo('選択したファイル',filepath2) fileType = [('テキストァイル','*.txt')] #ファイルタイプを指定 iniDir3 = os.path.abspath(os.path.dirname(__file__)) #初期表示フォルダ filepath3 = filedialog.askopenfilename(filetypes=fileType,initialdir = iniDir3) messagebox.showinfo('選択したファイル',filepath3) fileType = [('テキストァイル','*.txt')] #ファイルタイプを指定 iniDir4 = os.path.abspath(os.path.dirname(__file__)) #初期表示フォルダ filepath4 = filedialog.askopenfilename(filetypes=fileType,initialdir = iniDir4) messagebox.showinfo('選択したファイル',filepath4) fileType = [('テキストァイル','*.txt')] #ファイルタイプを指定 iniDir5 = os.path.abspath(os.path.dirname(__file__)) #初期表示フォルダ filepath5= filedialog.askopenfilename(filetypes=fileType,initialdir = iniDir5) messagebox.showinfo('選択したファイル',filepath5) fileType = [('テキストァイル','*.txt')] #ファイルタイプを指定 iniDir6 = os.path.abspath(os.path.dirname(__file__)) #初期表示フォルダ filepath6 = filedialog.askopenfilename(filetypes=fileType,initialdir = iniDir6) messagebox.showinfo('選択したファイル',filepath6) fileType = [('テキストァイル','*.txt')] #ファイルタイプを指定 iniDir7 = os.path.abspath(os.path.dirname(__file__)) #初期表示フォルダ filepath7 = filedialog.askopenfilename(filetypes=fileType,initialdir = iniDir7) messagebox.showinfo('選択したファイル',filepath7) fileType = [('テキストァイル','*.txt')] #ファイルタイプを指定 iniDir8 = os.path.abspath(os.path.dirname(__file__)) #初期表示フォルダ filepath8 = filedialog.askopenfilename(filetypes=fileType,initialdir = iniDir8) messagebox.showinfo('選択したファイル',filepath8) fileType = [('テキストァイル','*.txt')] #ファイルタイプを指定 iniDir9 = os.path.abspath(os.path.dirname(__file__)) #初期表示フォルダ filepath9 = filedialog.askopenfilename(filetypes=fileType,initialdir = iniDir9) messagebox.showinfo('選択したファイル',filepath9) fileType = [('テキストァイル','*.txt')] #ファイルタイプを指定 iniDir10 = os.path.abspath(os.path.dirname(__file__)) #初期表示フォルダ filepath10 = filedialog.askopenfilename(filetypes=fileType,initialdir = iniDir10) messagebox.showinfo('選択したファイル',filepath10) #list = [filepath] #for i in range(len(list)): # list_item = list[i] root.destroy() root.mainloop() x1_list=[] # data1格納用のx_listを定義 z1_list=[] # data1格納用のz_listを定義 x2_list=[] # data2格納用のx_listを定義 z2_list=[] # data2格納用のz_listを定義 x3_list=[] # data2格納用のx_listを定義 z3_list=[] # data2格納用のz_listを定義 x4_list=[] # data2格納用のx_listを定義 z4_list=[] # data2格納用のz_listを定義 x5_list=[] # data2格納用のx_listを定義 z5_list=[] # data2格納用のz_listを定義 x6_list=[] # data2格納用のx_listを定義 z6_list=[] # data2格納用のz_listを定義 x7_list=[] # data2格納用のx_listを定義 z7_list=[] # data2格納用のz_listを定義 x8_list=[] # data2格納用のx_listを定義 z8_list=[] # data2格納用のz_listを定義 x9_list=[] # data2格納用のx_listを定義 z9_list=[] # data2格納用のz_listを定義 x10_list=[] # data2格納用のx_listを定義 z10_list=[] # data2格納用のz_listを定義 #x11_list=[] # data2格納用のx_listを定義 #z11_list=[] # data2格納用のz_listを定義 f1=open(filepath1) f2=open(filepath2) f3=open(filepath3) f4=open(filepath4) f5=open(filepath5) f6=open(filepath6) f7=open(filepath7) f8=open(filepath8) f9=open(filepath9) f10=open(filepath10) #f11=open(1, list_item) #data1読み込み for line in f1: data1 = line[:-1].split(' ') x1_list.append(float(data1[0])) z1_list.append(float(data1[1])) #data2読み込み for line in f2: data2 = line[:-1].split(' ') x2_list.append(float(data2[0])) z2_list.append(float(data2[1])) for line in f3: data3 = line[:-1].split(' ') x3_list.append(float(data3[0])) z3_list.append(float(data3[1])) for line in f4: data4 = line[:-1].split(' ') x4_list.append(float(data4[0])) z4_list.append(float(data4[1])) for line in f5: data5 = line[:-1].split(' ') x5_list.append(float(data5[0])) z5_list.append(float(data5[1])) for line in f6: data6 = line[:-1].split(' ') x6_list.append(float(data6[0])) z6_list.append(float(data6[1])) for line in f7: data7 = line[:-1].split(' ') x7_list.append(float(data7[0])) z7_list.append(float(data7[1])) for line in f8: data8 = line[:-1].split(' ') x8_list.append(float(data8[0])) z8_list.append(float(data8[1])) for line in f9: data9 = line[:-1].split(' ') x9_list.append(float(data9[0])) z9_list.append(float(data9[1])) for line in f10: data10 = line[:-1].split(' ') x10_list.append(float(data10[0])) z10_list.append(float(data10[1])) #for line in f11: # data11 = line[:-1].split(' ') # x11_list.append(float(data11[0])) #z11_list.append(float(data11[1])) min_z = min(z1_list) max_z = max(z1_list) tmin = min(z2_list) if tmin < min_z: min_z = tmin tmax = max(z2_list) if tmax > max_z: max_z = tmax tmin = min(z3_list) if tmin < min_z: min_z = tmin tmax = max(z3_list) if tmax > max_z: max_z = tmax tmin = min(z4_list) if tmin < min_z: min_z = tmin tmax = max(z4_list) if tmax > max_z: max_z = tmax tmin = min(z5_list) if tmin < min_z: min_z = tmin tmax = max(z5_list) if tmax > max_z: max_z = tmax tmin = min(z6_list) if tmin < min_z: min_z = tmin tmax = max(z6_list) if tmax > max_z: max_z = tmax tmin = min(z7_list) if tmin < min_z: min_z = tmin tmax = max(z7_list) if tmax > max_z: max_z = tmax tmin = min(z8_list) if tmin < min_z: min_z = tmin tmax = max(z8_list) if tmax > max_z: max_z = tmax tmin = min(z9_list) if tmin < min_z: min_z = tmin tmax = max(z9_list) if tmax > max_z: max_z = tmax tmin = min(z10_list) if tmin < min_z: min_z = tmin tmax = max(z10_list) if tmax > max_z: max_z = tmax #tmin = min(z11_list) #if tmin < min_z: # min_z = tmin #tmax = max(z11_list) #if tmax > max_z: # max_z = tmax ## plt.xlabel('X') # x軸のラベル plt.ylabel('Z') # y軸のラベル plt.plot(x1_list, z1_list, color="red", alpha=0.8, linewidth=2.0, label="data1") plt.plot(x2_list, z2_list, color="red", alpha=0.8, linewidth=2.0, label="data2") plt.plot(x3_list, z3_list, color="red", alpha=0.8, linewidth=2.0, label="data3") plt.plot(x4_list, z4_list, color="red", alpha=0.8, linewidth=2.0, label="data4") plt.plot(x5_list, z5_list, color="red", alpha=0.8, linewidth=2.0, label="data5") plt.plot(x6_list, z6_list, color="red", alpha=0.8, linewidth=2.0, label="data6") plt.plot(x7_list, z7_list, color="red", alpha=0.8, linewidth=2.0, label="data7") plt.plot(x8_list, z8_list, color="red", alpha=0.8, linewidth=2.0, label="data8") plt.plot(x9_list, z9_list, color="red", alpha=0.8, linewidth=2.0, label="data9") plt.plot(x10_list, z10_list, color="red", alpha=0.8, linewidth=2.0, label="data10") #plt.plot(x11_list, z11_list, color="red", alpha=0.8, linewidth=2.0, label="data11") plt.legend() plt.xticks(fontsize=10) plt.yticks(fontsize=10) plt.ylim([min_z - 0.02, max_z + 0.02]) plt.grid(True) #グラフの枠を作成 fig = plt.figure() plt.subplots_adjust(wspace=0.3, hspace=0.6) plt.show() # 描画結果を出力する。必ず書く。

一例テキストファイルの二次元表示
![イメージ説明
これらのデータを奥行方向に繋げることはできないかと思い、似たような事を質問されている方をみつけました。
<https://teratail.com/questions/202453>
こちらの方のように動かす必要はないのですが、三次元は扱ったことがないので、どなたかご教授下さい。

実現したいこと
イメージ説明

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

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

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

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

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

magichan

2019/12/20 10:07

全てのXのデータは対応がとれている(全く同じ値が入っている)のでしょうか?
11390

2019/12/24 04:33

回答が遅れて申し訳ありません。 Xの値はすべて対応がとれています。 正確に言いますと data1 (1.0.1) (2.0.1) ・・・ data2 (1.0.5) (2.0.4) ・・・ といった形でXの値は統一してあります
guest

回答2

0

ベストアンサー

x_listが全て同じ値ということなので、
z_listを2次元配列に纏めるだけで3D wireframeは描けると思います。

Python

1import numpy as np 2import matplotlib.pyplot as plt 3from mpl_toolkits.mplot3d import Axes3D 4 5# 以下のDATA取得部は省略 6# x1_list ~ x10_list 7# z1_list ~ z10_list 8# x1_list ~ x10_list は全く同じデータらしいので x1_listだけ使う 9 10# z_list を纏めて2次元配列Zを生成 11Z = np.vstack([ 12 z1_list,z2_list,z3_list,z4_list,z5_list, 13 z6_list,z7_list,z8_list,z9_list,z10_list 14]) 15# XとYのデータを生成(yはとりあえず 0~9 としてます) 16X,Y = np.meshgrid(x1_list, range(Z.shape[0])) 17# データ描画部 18fig = plt.figure() 19ax = fig.gca(projection='3d') 20ax.plot_wireframe(X, Y, Z) 21plt.show()

投稿2019/12/24 10:05

magichan

総合スコア15898

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

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

0

ワイヤフレームで表示させたいということでしょうか?

3D wireframe plot — Matplotlib 3.1.1 documentation

データの前処理は相応に必要だと思うので、あれこれ工夫されると良いかと思います。

投稿2019/12/20 09:53

hayataka2049

総合スコア30935

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

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

11390

2019/12/24 05:03

wireframeというライブラリがあったんですね。少しやってみます
hayataka2049

2019/12/24 05:06

ライブラリではありません。描画の方法です。
11390

2019/12/24 05:45

すいません勘違いしていました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問