LoginSignup
3

More than 3 years have passed since last update.

gnuplotの3Dデータをmatplotlibで描けるように変換しよう

Last updated at Posted at 2018-12-12

gnuplot? matplotlib?

pythonを普段使っている僕は, どうしてもgnuplotを使いたくない!(笑)
ですが, 研究室の多くの方はgnuplotを使われている関係で, 3Dのマップデータをもらってもすぐにpythonで図を描けない...

それなら関数作っちゃおう

ということで, 簡単な関数を作ってみました.
numpyのお勉強になると思います.

コード

import numpy as np

def translate(file_name):
  data = np.loadtxt(file_name)

  x = np.unique(data[:,0])
  y = np.unique(data[:,1])
  z = data[:,2].reshape(len(x),len(y)).T

  return x, y, z

import matplotlib.pyplot as plt

x, y, z = translate("gnuplot用のデータファイル")
plt.pcolormesh(x, y, z)
plt.show()

これだけです.

コードの説明

  • numpy.loadtxt()

    与えられたファイルの中のデータを, ndarray形式で変換してくれます.

  • numpy.unique()

    今回の肝! ndarrayの中にある要素の内容をそのままndarray形式で返してくれます.

例えば

x = np.array([1,3,6,2,0,2,7,8,1,3,5,10])
y = np.unique(x)

print(y) # => array([0,1,2,3,5,6,7,8,10])

という風に, 構成要素を抜き出してくれます.

最後に

gnuplotもいいけど, matplotlibもいいですよ!

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
What you can do with signing up
3