LoginSignup
0
1

More than 1 year has passed since last update.

とある関数のとある値まででグラフ描画する

Last updated at Posted at 2022-09-23

グラフを作成するとき、とある関数のとある値までで描画を打ち切りたいことがあり、ちょっと考え込んでしまったのでメモを残します。

まず、とある指数関数のグラフを描いてみます。

import numpy as np
import matplotlib.pyplot as plt

def curve(x):
    return np.exp(0.1*x)

x = np.linspace(0, 60)
y = curve(x)

fig, ax = plt.subplots()
ax.plot(x, y, 'k')
plt.show()

fig1.png

途中から立ち上がりが鋭くなり、横軸xが60で縦軸yが400ちょっとまであります。これを、縦軸が200を超えたところで打ち切りたいとします。いろいろな方法がありそうですが、np.whereでyの中身を判定して、その判定結果(TrueかFalseの配列)を変数に保存し、グラフ描画のときのxとyに[]を付けて判定結果でフィルタしてやれば実現できました。

すなわち、

th = np.where(y<200) # yが200以下の場所
ax.plot(x[th], y[th], '-r')

という処理をした上でグラフ描画します。
全体のコードは以下のようになります(比較しやすくするため、打ち切らない値も併せて描画させています)。今回の処理では、ぴったり200の所で描画しなくなるのではなく、200を下回る最大の値の所で打ち切っています。そのため、場合によっては200の随分手前で描画が打ち切られることもありますので、そのような場合は、xの配列をnp.linspaceで作成するときに間隔を細かくすれば、ある程度対応可能です。

import numpy as np
import matplotlib.pyplot as plt

def curve(x):
    return np.exp(0.1*x)

x = np.linspace(0, 60)
y = curve(x)

fig, ax = plt.subplots()
th = np.where(y<200) # yが200以下の場所
ax.plot(x, y, '--k', alpha=0.3)
ax.plot(x[th], y[th], '-k')
plt.show()

fig2.png

もっといい方法がある気がするのですが、当面はこれでしのげています。

0
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
0
1