LoginSignup
3
1

More than 3 years have passed since last update.

jupyter notebookでcsvファイルを読み込んでグラフを重ねて書く

Last updated at Posted at 2020-11-03

前書き

最近jupyter notebookを使う機会があったので、そこで勉強した内容をまとめます。やったことはcsvファイルの必要な行だけを読み込んでグラフを描画させることです。

用意するcsvファイル

2つのcsvファイルをnumbersを用いて用意します。
1つめのファイル(hoge)の中身は
2020-10-28 19.15.24.png

2つめのファイル(hogehoge)は
2020-10-30 23.51.21.png

となっていて、hogeは2列目に0~180まで10刻みで数値が並んであり、3,4列目に2列目の値に対応するcosとsinの値が入っています。hogehogeは3列目がtanの値になっています。
このまま保存するとnumbersファイルとして保存されてしまうので、これらのファイルをcsvファイルに書き換え保存します。numbersだと、ファイル→書き出す→CSV… からcsvファイルを作成することができます。
2020-10-28 19.27.27.png

ディレクトリの構造

用意したcsvファイルと作るipynbファイル(ファイル名はsample.ipynb)のディレクトリの構造を以下のようにします。

sample
├── CSVfile
│   ├── hoge.csv
│   └── hogehoge.csv
└── sample.ipynb

コード

import

はじめに今回使用するライブラリ、モジュールをimportします。使用するものは以下になります。


import matplotlib.pyplot as plt
import matplotlib.ticker as ptick
from matplotlib.pyplot import figure
import japanize_matplotlib
import numpy as np
import pandas as pd

csvファイルの読み込み

次にcsvファイルの読み込みを行います。hogeのrow1とrow2の値、hogehogeのrow1とrow2の値を読み込みます。

#csvファイルを読み込む
#usecols:使う列の指定 skiprows:行のスキップ  names:取り出す列に名前をつける
data1 = pd.read_csv("CSVfile/hoge.csv", usecols=[1,2], skiprows=2, names=["x", "y"], encoding="utf8")
data2 = pd.read_csv("CSVfile/hogehoge.csv", usecols=[1,2], skiprows=1, names=["x", "y"], encoding="utf8")

pd.read_csv()はcsvを読み込む関数になっています。data1について見てみると

  • 第1引数"CSVfile/hoge.csv"は読み込むcsvファイル

  • 第2引数usecols=[1,2]は今回使用する列の指定(この場合csvファイルの2行目と3行目)

  • 第3引数skiprows=2はスキップする行の指定(この場合2行スキップし、3行目からの値を読み込む。)

  • 第4引数names=["x", "y"]は指定した2つの列に対して名前をつける

  • 第5引数encoding="utf8"は文字コードの指定

となっています。

グラフの描画

次に読み込んだ2つのcsvファイルから取り出した列に対するグラフを重ねて描画します。

plt.figure(figsize=(15, 6))#グラフのサイズ
#軸のメモリ幅
plt.xticks(np.arange(0, 180+1, 5))
plt.yticks(np.arange(-1, 1+0.1, 0.1))
#軸ラベル
plt.xlabel('x', fontsize=15)
plt.ylabel('y', fontsize=15)
#軸の範囲
plt.xlim([0,180])
plt.ylim([-1,1])
plt.grid(True)#gridの設定
#グラフの描画
plt.plot(data1["x"], data1["y"])
plt.plot(data2["x"], data2["y"])#グラフを重ねて表示

上から何をしているか見ていきます。

  • plt.figure()はグラフのないウィンドウを作成します。その引数であるfigsize=(15, 6)はグラフのサイズを指定しています。

  • plt.xticks()はメモリの設定に関する関数であり、第1引数にnp.arange()を入れることで軸のメモリ幅を指定できます。plt.xticks(np.arange(0, 180+1, 5))の場合だとx軸の値が0≦値≦180の範囲で5間隔のメモリが指定されます。またnp.arange()の第2引数が180+1となっているのは、np.arange()の定義が第1引数≦値<第2引数となっており、第2引数を180にするとメモリに180が表記されないため+1しています。

  • plt.xlabel()は軸のラベル付けをしていて、第1引数にラベル名、第2引数にフォントの大きさを指定しています。

  • plt.xlim()は軸の値の範囲を設定をしていて、今回はx軸が0≦x≦180、y軸が-1≦y≦1になるよう軸の範囲を指定しています。

  • plt.grid()はグリッド線(格子状の薄い線)の有無を、引数にtrueかfalseを入れることで指定できます。今回はtrueを入れて表示させるようにしました。

  • plt.plot()はグラフを描画する命令で、今回は引数にdata1["x"], data1["y"]を指定することで読み込んだcsvファイルのxとyをグラフの横軸、縦軸に設定しました。グラフを重ねたい場合は、重ねたいグラフをplt.plot()で続けて書くだけでできます。

実際にこのコードをjupyter notebookで走らせると

2020-11-03 14.29.39.png

という結果になり、設定した通り、hoge.csvのcos(x)の値とhogehoge.csvのtan(x)の値がグラフに描画されていることがわかります。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1