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()
好的,所以我不确定这是否可能。我正在尝试使用 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()