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

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

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

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

Python

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

1回答

1014閲覧

DFを基に二軸グラフを作成したいが、エラーが出現する

taihei_._

総合スコア15

Matplotlib

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

Python

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

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2021/09/06 08:04

編集2021/09/06 08:50

前提・実現したいこと

indexが日時、列が2列であるDFを基に二軸グラフを作成したいのですが、
最後の二行を実行するとエラーメッセージが出現し、行き詰っています。

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

TypeError: 'value' must be an instance of str or bytes, not a None

該当のソースコード

x = df4.index y1 = df4['有義波高 (H1/3) (m)'] y2 = df4['最高波周期 (Tp) (s)'] fig, ax1 = plt.subplots(figsize=(18,4)) ax2 = ax1.twinx() ax1.plot(x, y1, color='darkcyan', lw=0.5) ax2.plot(x, y2, color='red',lw=0.5)

###データフレーム print(df4)
イメージ説明

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

python3
jupyter notebook

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

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

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

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

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

ikapy

2021/09/06 08:37

どの行でエラーが出ていますか?質問に追加お願いします。 可能であればprint(df4)の結果を質問に追加お願いします。 ※質問力をつけましょう。
taihei_._

2021/09/06 08:50

ご指摘ありがとうございます。 追加いたしました。
guest

回答1

0

ベストアンサー

TypeErrorの原因はわかりませんね。というのは、こちらでは再現出来なかったからです。考えられるのは、python、pandasのバージョンが違うとか、開発環境が違うとか、質問者さんのプログラムが悪さをしているとかが考えられます。
こちらは、python=3.8.6、pandas=1.1.3 です。
データは、国土交通省ナウファスのものですね。これをダウンロードしてグラフ化するまでを作成してみましたので参考にしてください。
このデータは、固定長なのでスライスを利用して処理するのが良いと思います。また、データ中に未観測値(99.9とか999など)がありますので、それらはNaNにする必要があります。

python

1# 入力ファイル:h101e.019.txt(秋田 2019 波浪データ) 2# 情報元:国土交通省港湾局 全国港湾海洋波浪情報網 ナウファス(https://nowphas.mlit.go.jp/pastdata_select/) 3# 日付    line[:12] 4# 有義波高  line[36:42] 5# 最高波周期 line[66:72] 6 7from datetime import datetime 8import pandas as pd 9import matplotlib.pyplot as plt 10 11date_time, YuugiHako, SaikohaShuuki = [], [], [] 12with open("h101e.019.txt", 'r') as f: 13 f.readline() 14 for line in f: 15 date_str = line[0:12].replace(' ', '0') 16 date_str = f"{date_str[0:4]}-{date_str[4:6]}-{date_str[6:8]} {date_str[8:10]}:{date_str[10:12]}" 17 date_time.append(datetime.strptime(date_str, "%Y-%m-%d %H:%M")) 18 YuugiHako.append(float(line[36:42])) 19 SaikohaShuuki.append(float(line[66:72])) 20df = pd.DataFrame({"日付": date_time, "有義波高": YuugiHako, "最高波周期": SaikohaShuuki}) 21df = df.set_index("日付") 22df["有義波高"] = df["有義波高"].where(df["有義波高"] < 99.9) 23df["最高波周期"] = df["最高波周期"].where(df["最高波周期"] < 999.9) 24 25fig, ax1 = plt.subplots(figsize=(18, 4)) 26ax2 = ax1.twinx() 27x = df.index 28y1 = df['有義波高'] 29y2 = df['最高波周期'] 30ax1.plot(x, y1, color='darkcyan', lw=0.5) 31ax2.plot(x, y2, color='red', lw=0.5) 32plt.show() 33

実行結果です。
実行結果

投稿2021/09/06 23:14

ikapy

総合スコア1167

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

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

taihei_._

2021/09/07 01:36

ご回答ありがとうございます。 エラーの原因はわからないのですが、ご教授頂いたプログラムで 無事グラフを描くことができました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問