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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

pandas

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

Q&A

解決済

1回答

2139閲覧

Pandasのplotを使った際に描画されないデータがある。

kina_programing

総合スコア10

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

pandas

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

0グッド

0クリップ

投稿2020/02/22 15:39

現在下記のデータが格納されているCSVファイルを読み込んで描画するプログラムを作成しております。

Time[us],data1,data2
0,NaN,1
246.3,0,NaN
778.8,0,NaN
1778.8,0,NaN
2778.8,NaN,1
3778.8,0,NaN
4778.8,NaN,0
5278.8,0,NaN
6718.8,NaN,1
7718.8,NaN,0

このデータを下記のコードで描画すると一部データが描画されません。

python

1import pandas as pd 2import matplotlib.pyplot as plt 3import matplotlib 4import seaborn 5 6df = pd.read_csv("test.csv") 7df.plot(x = "Time[us]") 8plt.show() 9

イメージ説明

図を見るとdata1の5378.8 μsの値と、data2の0μsの値が描画されていないように思われます。
これらの値を含めて描画したいのですが、どのようにしたらいいでしょうか。

不足している情報などございましたらご教示お願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

NaNが挟まった部分はプロットされません。そして前後をNaNに挟まれているポイントでは線は引けません。

マーカーを出せばとりあえずマーカーは見えるようになるので、もしかしたらそれが目的のものかもしれません。

python

1import io 2import pandas as pd 3import matplotlib.pyplot as plt 4 5txt = """ 6Time[us],data1,data2 70,NaN,1 8246.3,0,NaN 9778.8,0,NaN 101778.8,0,NaN 112778.8,NaN,1 123778.8,0,NaN 134778.8,NaN,0 145278.8,0,NaN 156718.8,NaN,1 167718.8,NaN,0 17""" 18 19df = pd.read_csv(io.StringIO(txt)) 20df.plot(x="Time[us]", marker=".") 21plt.savefig("result.png")

result.png

間を繋げたい場合、DataFrame.plot一発だといけない気がします。いろいろやり方は思いつきます。df[["Time[us]", "data1"]]df[["Time[us]", "data2"]]をそれぞれ作り、NaNがある行を落として、同じAxesオブジェクトに対してプロットするというロジックで書くのが一つの手です。このやり方でやるとこんな感じです。

python

1import io 2import pandas as pd 3import matplotlib.pyplot as plt 4 5txt = """ 6Time[us],data1,data2 70,NaN,1 8246.3,0,NaN 9778.8,0,NaN 101778.8,0,NaN 112778.8,NaN,1 123778.8,0,NaN 134778.8,NaN,0 145278.8,0,NaN 156718.8,NaN,1 167718.8,NaN,0 17""" 18 19df = pd.read_csv(io.StringIO(txt)) 20 21ax = plt.subplot() 22for col in ["data1", "data2"]: 23 tmp = df[["Time[us]", col]] 24 tmp.dropna(axis=0, how="any").plot(x="Time[us]", ax=ax) 25 26plt.savefig("result.png")

result.png
イメージ説明

投稿2020/02/22 16:10

編集2020/02/22 16:23
hayataka2049

総合スコア30935

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

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

kina_programing

2020/02/23 01:30

丁重に答えていただきありがとうございます。 無事やりたいことができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問