Matplotlib绘制ln函数

时间:2017-11-07 21:09:31

标签: python matplotlib plot natural-logarithm

好的,所以我不确定这是否可行。我试图在python中绘制一个图形,使用matplotlib,它具有x和y的自然对数函数。

首先,我查找了包含如何使用自然日志进行绘图的说明的帖子。我找到了答案的一部分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和posy应该是有限值

1 个答案:

答案 0 :(得分:3)

似乎你想要绘制

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

这可以通过向这些函数提供数组P并使用代码中已有的绘图函数来完成。请注意,您不应该尝试在对数刻度上绘制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