🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Matplotlib

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

Python

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

Q&A

解決済

1回答

3059閲覧

Pythonでグラフを書く際のエラーについて

python-c-exuser

総合スコア1

Matplotlib

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

Python

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

0グッド

0クリップ

投稿2020/12/23 09:05

Pythonでグラフを書く際のエラーについて解決したいです

Python初心者です。
matplotlib.pyplotをインポートして複数のグラフを出力したいのですが、
ValueError: view limit minimum -36595.200000000004 is less than 1 and is an invalid Matplotlib date value. This often happens if you pass a non-datetime value to an axis that has datetime units
このようなエラーコードが出てきます。どのように改善すればよいのか困っています。
また、それぞれ一つずつの出力はできました。
よろしくお願いします。

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

ValueError: view limit minimum -36595.200000000004 is less than 1 and is an invalid Matplotlib date value. This often happens if you pass a non-datetime value to an axis that has datetime units

該当のソースコード

Python

1import pandas as pd 2import matplotlib.pyplot as plt 3import numpy as np 4 5x1 = np.array([2, 34]) 6y1 = np.array([226, 496]) 7x2 = [1956,1987] 8y2 =[124, 271] 9 10 11 12 13dg = pd.read_csv("Sots/doc/降雪量データ1953.csv", 14 encoding="utf-8") 15 16n = pd.Series(dg.降雪量.values,index=pd.date_range('1953',periods = len(dg), freq = 'A')) 17 18plt.ylabel('Snowfall') 19plt.xlabel('Year') 20 21 22 23plt.plot(n,marker=".",color="tab:blue") 24plt.plot(x1, y1) 25plt.plot(x2, y2)

試したこと

ここに問題に対して試したことを記載してください。

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

meg_

2020/12/23 10:59

「Sots/doc/降雪量データ1953.csv」の中身も提示されないと検証できないかと思います。
python-c-exuser

2020/12/23 14:14

質問に回答していただきありがとうございます。 こちらの記入に不備があり申し訳ありません。 Sots/doc/降雪量データ1953.csvの中身は以下のようになっております。 年 降雪量 1953 123 1954 226 1955 186 1956 124 1957 358 1958 219 1959 116 1960 140 1961 175 1962 196 1963 161 1964 207 1965 276 1966 277 1967 265 1968 280 1969 320 1970 359 1971 246 1972 206 1973 251 1974 405 1975 424 1976 268 1977 405 1978 290 1979 245 1980 320 1981 409 1982 303 1983 318 1984 496 1985 409 1986 397 1987 271 1988 339 1989 137 1990 216 1991 280 1992 260 1993 186 1994 311 1995 251 1996 261 1997 253 1998 243 1999 346 2000 253 2001 297 2002 226 2003 240 2004 263 何かまた不備がありましたら教えていただけると幸いです。
guest

回答1

0

ベストアンサー

変数nのindexを確認したところ、以下のようになっていますね。

python

11953-12-31 123 21954-12-31 226 31955-12-31 186 41956-12-31 124 51957-12-31 358 61958-12-31 219 71959-12-31 116 81960-12-31 140 91961-12-31 175 101962-12-31 196 111963-12-31 161 121964-12-31 207 131965-12-31 276 141966-12-31 277 151967-12-31 265 161968-12-31 280 171969-12-31 320 181970-12-31 359 191971-12-31 246 201972-12-31 206 211973-12-31 251 221974-12-31 405 231975-12-31 424 241976-12-31 268 251977-12-31 405 261978-12-31 290 271979-12-31 245 281980-12-31 320 291981-12-31 409 301982-12-31 303 311983-12-31 318 321984-12-31 496 331985-12-31 409 341986-12-31 397 351987-12-31 271 361988-12-31 339 371989-12-31 137 381990-12-31 216 391991-12-31 280 401992-12-31 260 411993-12-31 186 421994-12-31 311 431995-12-31 251 441996-12-31 261 451997-12-31 253 461998-12-31 243 471999-12-31 346 482000-12-31 253 492001-12-31 297 502002-12-31 226 512003-12-31 240 522004-12-31 263

datetime64[ns]型のデータであり、年だけでなく、月と日も付属しているということです。

この状態で以下のplotを成功させるためには、X軸に相当するであろうデータを、数値型ではなく、datetime64[ns]型に書き換える必要があります。

python

1plt.plot(x1, y1) 2plt.plot(x2, y2)

対策

plt.plot(x1, y1)については、何を表示したいのかが判然としないので対処法がわかりませんが、

plt.plot(x2, y2)については、

python

1# 元の書き方 2x2 = [1956,1987] 3y2 =[124, 271] 4 5# 変更後 6## 必要なモジュールインポート 7import datetime 8 9x2 = [ 10 datetime.datetime(1956, 12, 31), 11 datetime.datetime(1987, 12, 31) 12] 13y2 =[124, 271]

と変更することで、以下のような結果が得られます。

イメージ説明

投稿2020/12/26 10:47

siruku6

総合スコア1382

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

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

python-c-exuser

2020/12/26 11:40

回答していただきありがとうございます。 回答通りプログラムを変更すると自分のやりたかったことができました。 今回は本当にありがとうございます。 またプログラミングで困った際はどうぞよろしくお願いします。
siruku6

2020/12/26 11:54

どうしてそういう問題が起きていたのか、何がよくなくて、どこがポイントだったのかを理解する手助けになれていればうれしいです。 次の同じ問題にぶつかったときには自力で対処できるようになっていたらいいですね!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問