1
0
テーマ、知りたいこと
Pandasのデータフレームを列(カラム)ごとに可視化(折れ線グラフ)したいです。
現状としては、Pandasのplot()関数を用いて列ごとにプロットできましたが、
Y軸の目盛が100万を超えるとeを使った表現になってしまわないようにしたり、
グラフごとにタイトルの設定を行いたいです。
当初は、matplotlibを使って作業していましたが、うまくプロットできずにPandasを使っています。
該当のソースコード
Python
1import pandas as pd 2df = pd.read_csv("data.csv") 3df.plot( 4 subplots=True, 5 figsize=(40,80), # グラフサイズ(幅、高さ) 6 sharex=False, # 横軸の共有を解除 7 layout=(12, 2), 8 grid=True, 9) 10plt.show()
補足情報(FW/ツールのバージョンなど)
Windows 11
python : 3.10.8
pandas : 1.5.2
matplotlib : 3.6.3
jupyterlab : 3.5.2
ご回答いただいた方々へ
ご回答者の仰る通り、本件は意見交換ではなくQ&Aにすべきでした。
コメントができない為、こちらにコメントとして残すことにします。
やりたいこととして追加があります。
3桁ごとにコンマで区切りたいのですが、どのようにコーディングすれば
良いのでしょうか。
宜しくお願い致します。
追記
列ごとに個別の設定をするのはコードがかなり長くなるため、
for文を用いてアレンジしたいと考えております。
python
1fig = plt.figure(figsize = (40, 80), tight_layout=True) # グラフサイズ(幅、高さ) 2for col in range(df.shape[1]): 3 plt.subplot(12, 2, col+1) 4 plt.plot(df.iloc[:, col]) 5 6 for i in range(col): 7 plt.title(columns[i+1]) # 列No.をタイトルに 8 plt.ticklabel_format(style="plain", axis="y", scilimits=(0, 0)) # eを使わない表現 9 plt.gca().get_yaxis().set_major_formatter(ticker.FuncFormatter(lambda v,p: f'{int(v):,d}')) 10plt.show()
上記のように変更するとエラーになってしまいます。
error
1AttributeError: This method only works with the ScalarFormatter
また、上記のコードでは、0,0に表示されるグラフだけタイトルが表示されません。
これらはどのように解決できるでしょうか。
宜しくお願い致します。
追記
追加でご回答ありがとうございます。
タイトルだけ個別で設定すると冗長になるように思ったので、下記のように変更しました。
columnsという変数に項目名を入れたリストを作成しております。
Python
1columns = df.columns 2fig = plt.figure(figsize = (40, 80), tight_layout=True) # グラフサイズ(幅、高さ) 3for col in range(df.shape[1]): 4 plt.subplot(12, 2, col+1) 5 plt.plot(df.iloc[:, col]) 6 # plt.title("No." + str(col)) # 列Noをタイトル 7 plt.ticklabel_format(style="plain", axis="y", scilimits=(0, 0)) # eを使わない表現 8 plt.gca().get_yaxis().set_major_formatter(ticker.FuncFormatter(lambda v,p: f'{int(v):,d}')) # 3桁ごとにカンマで区切る 9 plt.grid() 10 # 列毎の個別設定 (必要なら) 11 for i in range(len(columns)): 12 if col == i: 13 plt.title(columns[i]) 14plt.show()
回答4件
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。