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

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

ただいまの
回答率

90.45%

  • Python

    12358questions

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

  • Python 3.x

    10325questions

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

  • pandas

    938questions

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

  • Matplotlib

    472questions

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

  • Jupyter

    457questions

X軸:日時、Y軸:数値の散布図作成時のエラー対処法

解決済

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 515

shu_magi

score 9

前提・実現したいこと

X軸:日時、y軸:数値の散布図を作成しようとしています。
データはcsvから読み込みます。

データ例
time        data_id    y
2018/10/1 10:00    1    1
2018/10/1 10:03    2    1
2018/10/1 10:10    3    1
2018/10/1 10:11    4    2
2018/10/1 10:20    5    2
2018/10/1 10:25    6    3
2018/10/1 10:30    7    4
2018/10/1 10:45    8    5
2018/10/1 10:55    9    5
2018/10/1 11:15    10    6

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

散布図plt.scatter()を実行すると後述のエラーが発生しました。(データ型のエラー?)
Googleで調べて見ましたが解決策が見つからないため、質問させていただきました。

また、同じデータで折れ線グラフplt.plot()を描写する場合は特にエラーは起きませんでした。

TypeError                                 Traceback (most recent call last)
<ipython-input-22-e5d05a1d5120> in <module>()
      7 data.describe()
      8 
----> 9 plt.scatter(data['time'], data['floor'])
     10 plt.xlabel('time')
     11 plt.ylabel('floor')

~\AppData\Local\Continuum\anaconda3\lib\site-packages\matplotlib\pyplot.py in scatter(x, y, s, c, marker, cmap, norm, vmin, vmax, alpha, linewidths, verts, edgecolors, hold, data, **kwargs)
   3473                          vmin=vmin, vmax=vmax, alpha=alpha,
   3474                          linewidths=linewidths, verts=verts,
-> 3475                          edgecolors=edgecolors, data=data, **kwargs)
   3476     finally:
   3477         ax._hold = washold

~\AppData\Local\Continuum\anaconda3\lib\site-packages\matplotlib\__init__.py in inner(ax, *args, **kwargs)
   1865                         "the Matplotlib list!)" % (label_namer, func.__name__),
   1866                         RuntimeWarning, stacklevel=2)
-> 1867             return func(ax, *args, **kwargs)
   1868 
   1869         inner.__doc__ = _add_data_doc(inner.__doc__,

~\AppData\Local\Continuum\anaconda3\lib\site-packages\matplotlib\axes\_axes.py in scatter(self, x, y, s, c, marker, cmap, norm, vmin, vmax, alpha, linewidths, verts, edgecolors, **kwargs)
   4323             linewidths = rcParams['lines.linewidth']
   4324 
-> 4325         offsets = np.column_stack([x, y])
   4326 
   4327         collection = mcoll.PathCollection(

~\AppData\Local\Continuum\anaconda3\lib\site-packages\numpy\lib\shape_base.py in column_stack(tup)
    592             arr = array(arr, copy=False, subok=True, ndmin=2).T
    593         arrays.append(arr)
--> 594     return _nx.concatenate(arrays, 1)
    595 
    596 def dstack(tup):

TypeError: invalid type promotion

該当のソースコード

import pandas as pd
import matplotlib.pyplot as plt
from pandas.plotting import scatter_matrix
%matplotlib inline

data = pd.read_csv("data_test_graph.csv",dtype="float",parse_dates = ["time"])
data.describe()

plt.scatter(data['time'], data['y'])
plt.xlabel('time')
plt.ylabel('floor')
plt.show()

試したこと

同じデータで折れ線グラフの描写を試した場合は特にエラーは起きませんでした。
(上記コードでplt.scatter(data['time'], data['y'])→plt.plot(data['time'], data['y'])の場合)

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

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

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

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

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

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

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

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

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

checkベストアンサー

+1

Pandas type error trying to plotによると、datetimeの場合はscatterの代わりにplot_dateを使うとよいようです。

import pandas as pd
data = pd.DataFrame({'time':['2018/10/1 10:00','2018/10/1 10:11','2018/10/1 10:25'],'y':[1,2,3]})
data['time'] = pd.to_datetime(data['time'])

import matplotlib.pyplot as plt

plt.plot_date(data['time'], data['y'])
plt.xlabel('time')
plt.ylabel('floor')
plt.show()


イメージ説明

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/12/06 17:30

    can110さん
    ありがとうございます。plot_dateで確かに散布図を作成できました!
    magichanさんの方法でも出来ました。今回は一番早く回答頂いたcan110さんをベストアンサーとさせていただきました。

    キャンセル

+1

data.plot(x='time', y='y', style='.')
plt.xlabel('time')
plt.ylabel('floor')
plt.show()

でどうでしょうか

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/12/06 17:44

    magichanさん
    ありがとうございます。こちらの方法でもできました!styleで点表示を指定できるんですね。

    キャンセル

0

https://qiita.com/ColdFreak/items/1028927c81fdfa5f3ac2
上記のように、タイプを
<class 'pandas.core.series.Series'>
上記から、以下に変更してあげると良いようです。
<class 'pandas.core.indexes.datetimes.DatetimeIndex'>

ただ、時系列データを散布図で見るというのはデータの傾向を眺めるという意味で考えると、散布図にこだわる必要性がないとは思いますが。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/12/06 17:55

    t_obaraさん
    回答ありがとうございます。
    time列のタイプはDatetimeになっているようなのですが、更に変換が必要なのでしょうか?

    data.dtypes

    time datetime64[ns]
    y float64
    です。

    キャンセル

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

  • ただいまの回答率 90.45%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

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

  • Python

    12358questions

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

  • Python 3.x

    10325questions

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

  • pandas

    938questions

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

  • Matplotlib

    472questions

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

  • Jupyter

    457questions