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

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

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

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

Python

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

解決済

plt.plotで特定の範囲に絞ってグラフを作成したいが、出力したグラフが歪んでしまう

humanbeing
humanbeing

総合スコア7

Matplotlib

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

Python

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

2回答

-1評価

0クリップ

277閲覧

投稿2022/03/05 10:54

編集2022/03/06 16:49

1980年,1990年,2000年,2010年,2020年の平均気温変化をグラフで表したい

こんにちは。

気象動向をスクレイピングで調査しており、10年ごとの月別平均気温の変化をグラフで可視化しようとしております。

皆様の協力あってスクレイピング自体はうまくいったのですが、1990年以降のグラフをうまく可視化することができないという問題に直面しました。X軸の設定は調整できているのですが、Y軸の設定がうまくいきません。逆にY軸をいじろうとすると、かえってX軸の範囲がおかしくなってしまい、どのように対処すればよいのかお伺いできればと思います。

グラフの作り方もまだ勉強中ですので、もっとシンプルな方法がある、このライブラリを使うべき、などのご意見がありましたら、是非参考にさせて頂きます。

よろしくお願いいたします。

コード、CSVはgithubの方にもアップロードしておきます。(追記:URLの間違いを訂正)
https://github.com/yamaplay/Weather_scr_avg

2000年のグラフが歪んでしまう

まず正しいグラフがどのようなものかが把握できないと思いますので、エクセルで作成した2000年のグラフをご覧ください。

イメージ説明

下記のコードを実行すると、このようなグラフになってしまいます。原因ですが、おそらく私がコードや範囲指定を誤っているせいだと思います。

グラフは正しいが、横軸がおかしい

横軸は正しいが、グラフは1980年のまま

ソースコード

import requests from bs4 import BeautifulSoup import csv place_name = ["札幌", "秋田", "新潟", "東京", "大阪", "広島", "高知", "熊本", "那覇"] place_codeA = [14, 32, 54, 44, 62, 67, 74, 86, 91] place_codeB = [47412, 47582, 47604, 47662, 47772, 47765, 47893, 47819, 47936] base_url = "http://www.data.jma.go.jp/obd/stats/etrn/view/monthly_s1.php?prec_no=%s&block_no=%s&year=%s&month=1&day=1&view=p1" def str2float(str): try: return float(str) except: return 0.0 if __name__ == "__main__": for place in place_name: All_list = [['年月', '降水量(mm)', '日の平均気温(℃)', '日の最高気温(℃)', '日の最低気温(℃)', '最高気温(℃)', '最低気温(℃)']] print(place) index = place_name.index(place) for year in range(1980, 2021): print(year) r = requests.get(base_url%(place_codeA[index], place_codeB[index], year)) r.encoding = r.apparent_encoding soup = BeautifulSoup(r.text) rows = soup.findAll('tr',class_='mtx') rows = rows[3:] for row in rows: data = row.findAll('td') rowData = [] #初期化 rowData.append(str(year) + "/" + str(data[0].string)) rowData.append(str2float(data[3].string)) rowData.append(str2float(data[7].string)) rowData.append(str2float(data[8].string)) rowData.append(str2float(data[9].string)) rowData.append(str2float(data[10].string)) rowData.append(str2float(data[11].string)) All_list.append(rowData) with open(place + '.csv', 'w') as file: writer = csv.writer(file, lineterminator='\n') writer.writerows(All_list) import matplotlib.pylab as plt import pandas as pd df=pd.read_csv('熊本.csv', encoding="SHIFT_JIS") h1, =plt.plot(df['日の平均気温(℃)'][0:12],label='1980/1~1980/12') plt.xticks(range(12),df['年月'][0:12],rotation=90,size='small') plt.legend(handles=[h1]) plt.show()#1980年のものはきれいに出力される df=pd.read_csv('熊本.csv', encoding="SHIFT_JIS") h2, =plt.plot(df['日の平均気温(℃)'][240:252],label='2000/1~2000/12') plt.xticks(range(12),df['年月'][240:252],rotation=90,size='small') plt.legend(handles=[h2]) plt.show()#こちらはグラフ自体は正しく出ているが、うまく描画できていない。 df=pd.read_csv('熊本.csv', encoding="SHIFT_JIS") h2, =plt.plot(df['日の平均気温(℃)'][0:12],label='2000/1~2000/12') plt.xticks(range(12),df['年月'][240:252],rotation=90,size='small') plt.legend(handles=[h2]) plt.show()#グラフは当然1980年のものになってしまう

補足、参考

参考にしているサイトは以下の通りです。
Pythonの覚え書き(グラフのプロット編)
https://hirotaka-hachiya.hatenablog.com/entry/2015/12/29/123142

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Matplotlib

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

Python

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