エラーの原因は,x
とthp50
のデータ形式がちぐはぐだからですね.
「1950年代の台風の数」がわからない(平均?最大値?個別に描画する?)のでなんとも言えませんが,例えば「1950年代の台風の数の平均」であれば以下のプログラムで描画できると思います.
python
1import pandas as pd
2import matplotlib.pyplot as plt
3import japanize_matplotlib
4import numpy as np
5
6thp = pd.read_csv("https://www.data.jma.go.jp/fcd/yoho/typhoon/statistics/generation/generation.csv", encoding="Shift-JIS")
7
8thp = thp.fillna(0)
9
10print(thp)
11
12#indexで取れるのは列ラベルではなく行ラベルなので,xlabelが月に来るようにしたい場合はcolumnsで取るのが正しいと思います
13#x = thp.index
14x = thp.columns[1:-1]
15
16
17#thp[0:10]から,1列目の「年」および最終列の「年間」をdropします
18#thp50 = thp[0:10]
19#thp10 = thp[60:70]
20
21thp50 = thp[0:10].iloc[:,1:-1]
22thp10 = thp[60:70].iloc[:,1:-1]
23manth = thp[0:1]
24
25# 今回は平均を描画されたいと仮定していますので,月ごとの平均,すなわち列ごとの平均をとります
26# 列ごとの平均を取るときに便利なので,valuesメソッドでnumpy形式に変換します
27thp50=thp50.values
28thp10=thp10.values
29
30
31# 平均を取ります.ラベル値も変更しています
32# plt.plot(x, thp50, label = "1950年代の台風の数", c = "red", tick_label = manth)
33# plt.plot(x, thp10, label = "2010年代の台風の数", c = "blue", tick_label = manth)
34
35plt.plot(x, np.mean(thp50, axis=0), label = "1950年代の台風の数(平均)", c = "red")#, tick_label = manth)
36plt.plot(x, np.mean(thp10, axis=0), label = "2010年代の台風の数(平均)", c = "blue")#, tick_label = manth)
37
38#X軸の最大値が大きすぎるので修正します
39#plt.xlim(0, 31)
40plt.xlim(0, 12)
41
42plt.ylim(0, 31)
43plt.grid(c="0.7", ls="dotted")
44plt.xlabel("月")
45plt.ylabel("発生数")
46
47plt.legend()
48plt.show()
コメントが入っているところが自分が修正した点です.よければ,コメントアウトを付けたり外したり,あるいは各ステップでデータの形状を可視化するする(thp50.shape
など)ことで,データの形がどの様になっているかを各ステップごとに確認してみてください.
このプログラムを実行すれば以下のようなグラフが描けると思います.
ここから,ラベルを付与する,棒グラフにするなど,自由に修正していただければと思います.
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。