2017-11-07 8 views
-2

これは可能かどうかわかりません。 matplotlibを使ってPythonでグラフをプロットしようとしていますが、xとyの自然な対数関数があります。ll関数をプロットしているMatplotlib

まず、自然なログを使用してハウツープロットの手順を含む記事を探しました。私は回答hereの一部と他の部分hereを見つけました。

問題は、私は1つのグラフに2行をプロットしようとしています。

方程式は以下のとおりです。

1) 0.91 - 0.42 * P = Q

2) 6.999 - .7903 * ln (P) = ln (Q)

はスケールの問題を与えられた1つのグラフ上に次の2行をオーバーレイすることが可能ですか?どうすればいい?

私は次のことを試してみました:

from pylab import * 
import matplotlib.pyplot as plt 
import matplotlib 
get_ipython().magic('matplotlib inline') 
import numpy as np 
import pandas as pd 

P = np.linspace(0, 1, 11) 

P 

matplotlib.rcParams['xtick.major.pad'] = 5 
matplotlib.rcParams['ytick.major.pad'] = 5 

fig, ax = plt.subplots(figsize = (12,6)) 

axes = plt.gca() 
axes.set_ylim([0, 16]) 

ax.plot(P, 0.91 - 0.42 * P, color = "BLUE", lw = 3, label = 'C1') 

x = P ** np.e 
y = 6.999 - .7903 * x 
y1 = y ** np.e 
ax.loglog(x, y, basex = np.e, basey = np.e) 
ax.legend() 

ax.set_title("Cluster 1 Pricing") 

ax.xaxis.labelpad = 5 
ax.yaxis.labelpad = 5 

ax.set_xlabel("Norm P") 
ax.set_ylabel("Norm Q"); 

しかし、これはエラーを返します:

ValueError: posx and posy should be finite values

+1

"規模の問題" とは何ですか?試してみるとどうなりますか? – ImportanceOfBeingErnest

+0

https://matplotlib.org/gallery/index.html#pyplot-examples – wwii

答えて

2

あなたがこれは配列を供給することにより行うことができる

q1 = lambda p: 0.91 - 0.42 * p 
q2 = lambda p: np.exp(6.999 - .7903 * np.log(p)) 

プロットしたいようですPをこれらの関数に追加し、すでにコードに含まれているプロット関数を使用します。あなたはlogrithmicスケールで0をプロットしようとしないでください。

import matplotlib.pyplot as plt 
import numpy as np 

P = np.linspace(0.01, 1, 11) 

fig, ax = plt.subplots(figsize = (12,6)) 

q1 = lambda p: 0.91 - 0.42 * p 
q2 = lambda p: np.exp(6.999 - .7903 * np.log(p)) 

ax.plot(P, q1(P), color = "BLUE", lw = 3, label = 'Q1') 

ax.loglog(P, q2(P), basex = np.e, basey = np.e, 
      color = "crimson", lw = 2, label = 'Q2') 
ax.legend() 


ax.set_title("Cluster 1 Pricing") 
ax.set_xlabel("Norm P") 
ax.set_ylabel("Norm Q") 

plt.show() 

enter image description here

関連する問題