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

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

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

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

Q&A

解決済

1回答

1065閲覧

ValueError: x and y must have same first dimension, but have shapes (70,) and (10, 14)の解決方法

ngm_programmer

総合スコア5

Python

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

0グッド

0クリップ

投稿2021/12/24 09:12

編集2021/12/25 01:07

ValueError: x and y must have same first dimension, but have shapes と表示されてしまい、グラフが表示されません。どうしたら表示されますでしょうか。
よろしくお願いいたします。

python

1import pandas as pd 2import matplotlib.pyplot as plt 3import japanize_matplotlib 4 5 6thp = thp.fillna(0) 7 8print(thp) 9 10x = thp.index 11thp50 = thp[0:10] 12thp10 = thp[60:70] 13manth = thp[0:1] 14 15p 16 17plt.legend() 18plt.show()

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

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

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

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

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

guest

回答1

0

ベストアンサー

エラーの原因は,xthp50のデータ形式がちぐはぐだからですね.

「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など)ことで,データの形がどの様になっているかを各ステップごとに確認してみてください.

このプログラムを実行すれば以下のようなグラフが描けると思います.
イメージ説明

ここから,ラベルを付与する,棒グラフにするなど,自由に修正していただければと思います.

投稿2021/12/24 13:31

skonb

総合スコア9

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問