6
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Python初学者がmatplotlib.pyplotでヒストグラムを作ってみる

Last updated at Posted at 2018-03-01

Pythonは覚えることが、とにかく多い(涙、と言うより毎日泣いている)

今回は備忘録として、matplotlib.pyplotでヒストグラムをいくつか作ってみました。

qiita.rb
import numpy
import matplotlib.pyplot as plt
qiita.rb
#適当にランダムなデータを作る。
#random.normalは「ランダムな正規分布」を作る。(平均,分散,件数)

data1 = numpy.random.normal(70, 10, 300)    
data2 = numpy.random.normal(20, 20, 300)
data3 = numpy.random.normal(50, 30, 300)
data4 = numpy.random.normal(98, 85, 300) 

##普通にグラフを描いてみる&2つのグラフを重ねてみる。
ヒストグラムを描くときはコレ。

ply.hist(データ,色,透明度)

グラフのタイトルや軸の説明を設定し、表示する。
別のデータで重ねてヒストグラムを描く。
重ねるために色を変えて alpha で半透明にしている

qiita.rb
plt.hist(data1, color='red', alpha=.5)  
plt.hist(data2, color='blue', alpha=.5) 

plt.title('histgram test')
plt.xlabel('x axis')
plt.ylabel('y axis')
plt.show()
hist1.png

##複数のグラフをレイアウトして並べてみる
複数のグラフを描くときはこれ。
plt.figureメソッドのadd_subplot(行,列,位置)
histメソッドで(data)を与える。
axはaxis=軸のこと。

・サブプロット(グラフ)を作りレイアウトする
-> 3x3 分割の 1 番(左上)にグラフを置く
※ひとつ目だけ「色指定、半透明」にした。
・データを与えてヒストグラムを描く
・2つ目のグラフを作る
-> 3x3 分割の左上から数えて6番目の場所にグラフを置く
・3x3 分割の左上から数えて8番目の場所にグラフを置く

qiita.rb
fig = plt.figure()
ax1 = fig.add_subplot(3, 3, 1) 
ax1.hist(data1,color='red', alpha=.5) 
ax2 = fig.add_subplot(3, 3, 6)  
ax2.hist(data2)
ax3 = fig.add_subplot(3, 3, 8)  
ax3.hist(data3)
plt.show()
hist2.png

##縦横2つずつ、計4つのグラフを並べてみる
行列形式でグラフを配置
plt.subplot(行,列)で形状指定
行列の指定位置にdataを置く。
axesはaxisの複数形で複数の軸=2次元以上のこと。
また、pltではtitleがplt.titleで表現できるが、axesではaxes.set_titaleとsetが余計に入る点に注意。

・[0,0] 左上にレイアウトされたグラフ
・[0,1] 右上(以下同文)
・[1,0] 左下(以下同文)
・[1,1] 右下(以下同文)

qiita.rb
fig2, axes = plt.subplots(2, 2)
axes[0, 0].hist(data1)
axes[0, 0].set_title('data1')
axes[0, 1].hist(data2) 
axes[0, 1].set_title('data2')
axes[1, 0].hist(data3) 
axes[1, 0].set_title('data3')
axes[1, 1].hist(data4) 
axes[1, 1].set_title('data4')
plt.show()
hist3.png

なるほど、なるほど。
でも、これって敢えて行列形式で練習しているけど、さっきの配置指定でも可だよね。

qiita.rb
fig = plt.figure()
ax1 = fig.add_subplot(2, 2, 1) 
ax1.hist(data1,color='red', alpha=.5) 
ax2 = fig.add_subplot(2, 2, 2)  
ax2.hist(data2)
ax3 = fig.add_subplot(2, 2, 3)  
ax3.hist(data3)
ax4 = fig.add_subplot(2, 2 ,4)
ax4.hist(data4)
plt.show()
hist4.png

うん、やっぱり同じ。よし!

##この例をループを使ってかっこつけてやってみる
ループを使うのでデータはリストに入っている必要がある
data_list=[・・・]
注)fig.add_subplotのsubplotは単数形だが、fig3, axes2=plt.subplotsは複数形

・縦横2つずつのグラフが2次元配列に入っているが、ループで処理したいので1次元配列として(直列に)並べる。なるほど。
・ループでデータやタイトルをセットしていく

qiita.rb
data_list = [data1, data2, data3, data4]    
fig3, axes2 = plt.subplots(2, 2)
ax = axes2.ravel()  

for i in range(4):
    ax[i].hist(data_list[i])
    ax[i].set_title('data' + str(i + 1))
    ax[i].set_xlabel('x axis')
    ax[i].set_ylabel('y axis')

plt.show()
hist5.png

うん、うん同じ。なんとな~くわかってきた。

6
11
2

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
6
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?