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

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

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

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

Python 3.x

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

pandas

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

Q&A

解決済

1回答

227閲覧

Matplotlibを使用して、コラムの値ごとにグラフを描画する。

Danrussia

総合スコア44

Matplotlib

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

Python 3.x

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

pandas

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

0グッド

0クリップ

投稿2019/10/15 10:48

###最初に
自分の言語能力が低いのと、実装したい事が幾らか抽象的なので、伝わりづらい所があったら、遠慮なく指摘していただけたら幸いです。

前提・実現したいこと

Python3.7で下記のdfの "BeanNumber_vert"ごとにfor文でグラフを描画させ、.jpg形式で保存するというコードを考えています。

この様な流れでの実装を考えていました。
0. dfから"BeanNumber_vert"をリスト(Label)として抽出
0. ブーリアンインデックスでLabelとdfと"BeanNumber_vert"の値が一致ものを取り出す
0. 「2.」をMatplotlibで描画させる。
0. 上記の過程をfor文を用いて、dfの全ての"BeanNumber_vert"に関してMatplotlibで描画させる。

実際にコードを書く上で、↑の「1.」の部分が上手く実装できていないのか上手く作動させる事ができませんでした。

該当のソースコード

Python3

1import os 2import matplotlib 3import matplotlib.pyplot as plt 4import pandas as pd 5import numpy as np 6 7df = pd.DataFrame( 8 { 9 "Weight(g)": [0.43, 0.4, 0.45, 0.4, 0.35, 0.5, 0.35, 0.51, 0.43], 10 "Long Axis": [0.92, 0.9, 1.04, 0.97, 0.97, 0.8, 0.97, 1.21, 0.92], 11 "Short Axis": [0.91, 0.89, 0.97, 0.92, 0.88, 0.7, 0.88, 0.95, 0.85], 12 "Grain Thickness": [0.73, 0.56, 0.63, 0.74, 0.51, 0.6, 0.51, 0.77, 0.83], 13 "BeanNumber_vert": ["B2", "B2", "B2", "B6", "B6", "B6", "B39", "B39", "B39"], 14 } 15) 16 17for Label,data in zip(df["BeanNumber_vert"],df): 18 bean_number = df.iloc[0]["BeanNumber_vert"] 19 [df["BeanNumber_vert"]==Label] 20 df1 = data[data["BeanNumber_vert"]==Label] 21 df1.hist("Long Axis") 22 plt.savefig(f"bean_number_{bean_number}.jpg")

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

--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-52-88d6d44357b1> in <module>() 1 for data,Label in zip(df,grouped_df): ----> 2 df1 = data[data["BeanNumber_vert"]==Label] 3 df1.hist("Long Axis") 4 plt.savefig(f"bean_number_{bean_number}.jpg") TypeError: string indices must be integers string indices must be integers

試したこと

for Label,data in zip(df["BeanNumber_vert"],df): bean_number = df.iloc[0]["BeanNumber_vert"] [df["BeanNumber_vert"]==Label]★

"★"の部分でdfの"BeanNumber_vert"をList型として取り出せてないため、上記の様なエラーコードが発生していると思ったのですが、エラーコードを見るに、ブーリアンインデックスでは文字型ではなく、整数型として要求されてました。
この事に関して調べてみたのですが、自分の力量では特に解決案を見つけれられませんでした...

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

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

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

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

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

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

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

guest

回答1

0

ベストアンサー

pandas.DataFrame.hist の引数 column と by を使用すると1行でかけます。

今回の場合、列 Long Axis を列 BeanNumber_vert でグループごとに分けてヒストグラムを作成したいということなので、column に Long Axis、by に BeanNumber_vert を指定します。

ヒストグラムのレイアウトや色、大きさなどの見た目も引数で調整できるのでデフォルトの見た目が気に入らない場合は調整してみてください。

python

1import matplotlib.pyplot as plt 2import pandas as pd 3 4df = pd.DataFrame( 5 { 6 "Weight(g)": [0.43, 0.4, 0.45, 0.4, 0.35, 0.5, 0.35, 0.51, 0.43], 7 "Long Axis": [0.92, 0.9, 1.04, 0.97, 0.97, 0.8, 0.97, 1.21, 0.92], 8 "Short Axis": [0.91, 0.89, 0.97, 0.92, 0.88, 0.7, 0.88, 0.95, 0.85], 9 "Grain Thickness": [0.73, 0.56, 0.63, 0.74, 0.51, 0.6, 0.51, 0.77, 0.83], 10 "BeanNumber_vert": ["B2", "B2", "B2", "B6", "B6", "B6", "B39", "B39", "B39"], 11 } 12) 13 14df.hist("Long Axis", by="BeanNumber_vert") 15 16plt.savefig("hist.png")

イメージ説明

投稿2019/10/15 11:55

tiitoi

総合スコア21956

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

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

Danrussia

2019/10/15 13:24

回答ありがとうございます。 質問欄の説明量が少なすぎて、少し自分のイメージと違う仕様だったので、新規に質問を作成しなおします...
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問