Matplotlib 绘制 ln 函数

Matplotlib plotting ln functions

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

首先,我查找了包含有关如何使用自然对数绘图的说明的帖子。我找到了部分答案 here and the other part 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");

但是这个returns错误:

ValueError: posx and posy should be finite values

看来你要阴谋

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()