我正在尝试绘制一个函数,其函数为I_threshold = A * e ^(T / T_0)。 所以y轴用基数e进行对数缩放。
我的输入看起来像这样
Temp=[10,12.5,15,17.5,20,22.5,25,27.5,30,32.5,35,37.5,40,42.5,45,47.5,50]
和输出,即I_threshold看起来像这样
[22.376331312083646, 22.773439481450737, 23.440242034972115, 23.969920199339803, 24.80014584753161, 25.275728442307503, 26.291852943772966, 26.969268640398795, 28.09683889698702, 28.952552190706545, 30.325961112054102, 31.488435380923281, 33.176033568454699, 34.613872631424236, 36.710165595581906, 38.567151879424728, 41.245216030694756]
我尝试使用上述等式确定函数并返回函数。所以我使用以下代码来分散和绘制函数。
fig3=plt.figure(3)
ax3=fig3.add_subplot(111)
def efit(T,T_0,A):
return(A*np.e**(T/T_0))
Temp=[10,12.5,15,17.5,20,22.5,25,27.5,30,32.5,35,37.5,40,42.5,45,47.5,50]
params_dremp, covariance_dremp= optimize.curve_fit(efit,Temp,I_threshold)
#print(params_dremp[0],params_dremp[1])
majorLocator_2=MultipleLocator(5)
majorFormatter_2=FormatStrFormatter('%.1f')
minorLocator_2=MultipleLocator(1)
#ax3.xaxis.set_major_locator(majorLocator_2)
#ax3.xaxis.set_major_formatter(majorFormatter_2)
#ax3.xaxis.set_minor_locator(minorLocator_2)
locmaj = LogLocator(base=np.e, numticks=1)
ax3.yaxis.set_major_locator(locmaj)
print(I_threshold)
#print(np.size(Temp),np.size(I_threshold))
plt.scatter(Temp,I_threshold)
ax3.set_yscale('log',basey=np.e)
#plt.semilogy(Temp,I_threshold, basey=np.e)
#plt.plot(Temp,fitt(Temp,*params_dremp),'b--')
plt.xlabel('$ T_c \ (^0 C)$')
plt.ylabel('$ I_t \ (mA) $')
#plt.tick_params(axis='y', which='minor')
plt.grid(True,which="major",color='black',ls="-",linewidth=0.5)
当我以正常比例分散绘制数据时。我得到以下图片。
但是,当使用基准e的对数刻度y轴散射时,我得到以下图像。
此图表在查看图像时似乎不是线性的。有人知道这里出了什么问题。
我的目标是制作一个看起来像这样的情节。
谢谢
答案 0 :(得分:1)
请注意,如果数据在对数刻度上不是线性的,这意味着数据不正确或者出现此期望的模型是错误的。无论如何,这在这里没有任何帮助。
是否使用日志比例来定位e
或10
并不会更改图表本身,因为它们只是因常数因子[wikipedia]
然后,将是否将标记标记显示为基数e或基数10标记,例如,只是一种品味问题。 1 * 10^2
与1 * e^2
进行比较。由于所讨论的情节只有十分之一的时间,因此似乎更适合使用十进制刻度或正常数字,如下所示。
要在绘图上生成对数刻度,可以使用ax.set_yscale('log')
。因为这里要绘制的值的范围相当有限且不超过十年,所以仍然可以使用通常的AutoLocator
来调整刻度。
import matplotlib.pyplot as plt
from matplotlib.ticker import AutoLocator, ScalarFormatter
Temp=[10,12.5,15,17.5,20,22.5,25,27.5,30,32.5,35,37.5,40,42.5,45,47.5,50]
I_threshold = [22.376331312083646, 22.773439481450737, 23.440242034972115,
23.969920199339803, 24.80014584753161, 25.275728442307503,
26.291852943772966, 26.969268640398795, 28.09683889698702,
28.952552190706545, 30.325961112054102, 31.488435380923281,
33.176033568454699, 34.613872631424236, 36.710165595581906,
38.567151879424728, 41.245216030694756]
fig, ax = plt.subplots()
ax.set_yscale('log')
ax.yaxis.set_major_locator(AutoLocator())
ax.yaxis.set_major_formatter(ScalarFormatter())
ax.minorticks_off()
ax.scatter(Temp,I_threshold)
plt.xlabel('$ T_c \ (^\circ C)$')
plt.ylabel('$ I_t \ (mA) $')
plt.grid(True,which="major",color='black',ls="-",linewidth=0.5)
plt.show()
这会产生问题所需的情节。