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

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

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

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

Python 3.x

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

1回答

1681閲覧

Pythonでmatplotlibを使用して、連続で100個のヒストグラムを描画する。

Danrussia

総合スコア44

Matplotlib

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

Python 3.x

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

1クリップ

投稿2020/02/19 09:59

編集2020/02/19 13:07

前提・実現したいこと

Python3を使用して、連続で100個のヒストグラムの描画を試みています。
具体的には次の様な流れでの実装を考えました。

「glob.glob()で特定のフォルダ内にある、csvファイルを全てリストとして受け取る」↓ 「受け取ったリストを一つずつ読み、一次元配列にする」↓ 「matplotlibのsubplt.subplots()で10*10(縦10,横10)の図を作る」↓ 「一次元配列にしたもののヒストグラムを作成する」↓ 「先ほど作成したsubplotsにひとつずつ入れていく」↓

読み込むcsvファイルとしては以下の様なものです

python3

1df = pd.DataFrame(np.arange(12).reshape(3, 3), 2 columns=['X3380', 'X3381', 'X3382'] 3 index=['Y2356', 'Y2357', 'Y2358'])

イメージ説明

実装にあたり、以下のサイトを参考に実装を試みたのですが、上手くイメージ通りに動かせませんでした。
特にsubplots()で作成した後に、一つずつヒストグラムを入れていく方法が分からないです。
(https://qiita.com/Keyskey/items/5d1a2e516b5593a3bbed)
(http://bicycle1885.hatenablog.com/entry/2014/02/14/023734)

該当のソースコード BAのコード

Python3

1import os 2import glob 3import numpy as np 4import pandas as pd 5import matplotlib.pyplot as plt 6import seaborn as sns 7 8def identification_filetype(path): 9 _, ext = os.path.splitext(path) 10 if ext == ".csv": 11 return pd.read_csv(path, encoding="shift-jis") 12 elif ext == ".txt": 13 return pd.read_csv(path, encoding="shift-jis", sep="\t") 14 15def Convert_Onedimensional_Array(df): 16 df1 = df.drop(df.columns[0], axis=1) 17 df2 = df1.values 18 df3 = df2.flatten() 19 return df3 20 21 22PathName = "C://Users//For Programming//Documents//Python Scripts//test//*.csv" 23AnalysisObject_files= glob.glob(PathName) 24 25All_Data = [] 26for i in AnalysisObject_files: 27 df = identification_filetype(i) 28 df1 = Convert_Onedimensional_Array(df) 29 All_Data.append(df1) 30 31 32fig, axes = plt.subplots(nrows=10, ncols=10) 33 34for data, ax in zip(All_Data, axes.ravel()): 35 ax.hist(data) 36 37 38plt.tight_layout() 39plt.show()

試したこと

"試したこと"というほどの事はできていないのですが、グラフが100個あるので、下に書いたような手動な方法ではなく、for文での自動的な処理で100個のグラフを作成したいです。

Python3

1fig, (ax1, ax2, ax3,....,axn) = plt.subplots(1, n, figsize=(40, 10))

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

直接的な解決案の回答でなくとも、参考になりそうなサイト、類似の事例を教えて頂けると幸いです。
お忙しいとは思いますが、よろしくお願いいたします。
情報に不足がありましたら、ご指摘お願いいたします

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

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

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

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

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

guest

回答1

0

ベストアンサー

python

1fig, axes = plt.subplots(nrows=10, ncols=10)

axes(10, 10)Axesオブジェクトを格納したnumpy配列が束縛されますので、

python

1for data, ax in zip(データの一覧の配列, axes.ravel()): 2 ...

python

1for i in range(10): 2 for j in range(10): 3 ax = axes[i, j] 4 data = # 何らかの方法で該当するデータを取る

という感じでループさせてプロットするのが一般的です。

投稿2020/02/19 10:29

hayataka2049

総合スコア30935

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

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

Danrussia

2020/02/19 12:39

回答ありがとうございます。まだ現時点で解決した訳ではないのですが、教えて頂いた後者の二重for文の場合だと、ずっと状態が"running"のままで無限ループ?の様な形になっているので、zipの方を試してみます。 取り急ぎご連絡まで
Danrussia

2020/02/19 13:06

for文の方でも、10分強かかりましたが、なんとか出力されました。 for文でzip()の方が遥かに高速だったので、そちらを採用する事にします。 迅速な対応ありがとうございました。
hayataka2049

2020/02/19 13:17 編集

スピードはほとんど変わらないはずですけどねえ。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問