2017-11-07 8 views
-2

그래,이게 가능한지 확실하지 않아. matplotlib를 사용하여 파이썬에서 그래프를 플롯하려고합니다. x와 y의 자연 로그 함수가 있습니다.ln 함수를 플로팅하는 Matplotlib

먼저 자연 로그를 사용하여 how-to plot에 대한 지침이 포함 된 게시물을 찾습니다. 나는 대답 here의 일부와 here 다른 부분을 발견했다.

문제는 하나의 그래프에 두 줄을 그려 넣으려는 것입니다.

방정식은 :

1) 0.91 - 0.42 * P = Q

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

는 스케일 문제 주어진 하나의 그래프 상에 두 라인을 오버레이 할 수 있는가? 나는 그것을 어떻게 할 것이냐?

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 scale로 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