python - 我定义了我的两个函数,但它没有绘制
问题描述
大家好,我正在尝试绘制这两个函数 x(x2) vs y(x2)。x(x2) 等于 log10(x_2) 并且 y(x_2) 等于 gam(x2),后者也等于 (gam0 - 0.0187 * temp * math.log10(1+628.14 55.556 x_2))。y(x_2) 的代码似乎工作正常,但我似乎无法让 x(x_2) 的代码工作。当它绘制它应该看起来像这样1
import matplotlib.pyplot as plt
import numpy as np
import math
import pylab
%matplotlib inline
gam0 = 72.8
temp = 293.15
#x = range(0, 10000)
#x_2= range(0, 10000)
def gam(x_2):
returns = []
for x_i in x_2:
returns.append(gam0 - 0.0187 * temp * math.log10(1+628.14*55.556*x_i))
return returns
def x(x_2):
returns = math.log10(x_2)
x()
plt.plot(gam(x_2), x(x_2))
plt.xlabel('Log_10x_2')
plt.ylabel('gamma (erg cm^2)')
plt.show()
这些是我得到的错误
NameError Traceback (most recent call last)
<ipython-input-13-ac6002d962a0> in <module>
25
26
---> 27 plt.plot(gam(x_2), x(x_2))
28
29 plt.xlabel('Log_10x_2')
<ipython-input-13-ac6002d962a0> in x(x_2)
19 return returns
20 def x(x_2):
---> 21 returns = numpy.log10(x_2)
22
23 return returns
解决方案
我发现您的代码存在许多问题:
您的功能
x(x_2)
不返回任何内容。相反,它不断地递归调用自己。您正在调用
math.log10
,它仅作用于单个数字,而不是数组。您可以将其包装在一个循环中,也可以调用该numpy
版本。在您的功能中,
gam(x_2)
您正在使用log10
,但log
需要。您的绘图范围是,您需要在 x 轴上更小的值。我添加了两个变体,因为网格点的间距在线性和对数刻度上是不同的。此外,
np.linspace()
您可以指定网格点的数量,而不是步长。(有关详细信息,请参阅https://numpy.org/doc/1.18/reference/generated/numpy.linspace.html)
这是整体代码
import matplotlib.pyplot as plt
import numpy as np
gam0 = 72.8
temp = 293.15
x_2 = np.linspace(1e-7, 1e-1, 1000) # evenly spaced on linear scale
x_2 = 10**np.linspace(-7, -1, 1000) # evenly spaced on logarithmic scale
def gam(x_2):
return gam0 - 0.0187 * temp * np.log(1+628.14*55.556*x_2)
def x(x_2):
return np.log10(x_2)
plt.plot(x(x_2), gam(x_2))
plt.xlabel('Log_10x_2')
plt.ylabel('gamma (erg cm^2)')
也可以让 matplotlib 处理 x 轴上的对数刻度:
plt.plot(x_2, gam(x_2))
plt.xlabel('x_2')
plt.ylabel('gamma (erg cm^2)')
plt.gca().set_xscale('log')
推荐阅读
- sql - 在 SQL 的检查约束内使用“不在”查询
- json - 在 Flutter 中获取嵌套 JSON 属性的长度
- javascript - 如果另一个标签具有使用 jQuery 或 ASP.NET MVC 的特定文本,则添加新标签
- javascript - 如何使 Phaser3 GlowFilterPostFx 在 ES6 项目中工作?
- kubernetes - 如何调试 Kubernetes 集群?
- linux - 使用 gstreamer v4l2src 从网络摄像头记录特定时间
- google-apps-script - 如何在 Google Apps 脚本中将单元格值设置为 TRUE
- c# - 间接访问字符串变量 C#
- python - 从数据框中读取网络链接会引发“过时的元素引用:元素未附加到页面文档”错误
- react-native - 如何在屏幕之间重新启动 react-native-reanimated 动画切换?