在python中绘制幂函数,但图形为空
我试图绘制一个函数I=t^n的图形,这样在每30步间隔之后,n的值变成n/2,其中最初n=4。 运行代码时没有错误,但我没有得到任何图形在python中绘制幂函数,但图形为空,python,numpy,matplotlib,numbers,Python,Numpy,Matplotlib,Numbers,我试图绘制一个函数I=t^n的图形,这样在每30步间隔之后,n的值变成n/2,其中最初n=4。 运行代码时没有错误,但我没有得到任何图形 import matplotlib.pyplot as plt import numpy as np fig = plt.figure() n=4 for t in range (1,193): I=t**n if(t%30==0): n=n/2 plt.plot(t,I,'r') plt.xtick
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
n=4
for t in range (1,193):
I=t**n
if(t%30==0):
n=n/2
plt.plot(t,I,'r')
plt.xticks([0, 10, 41, 71, 101, 132, 163],
["Jan","Feb", "Mar", "Apr", "May", "June", "July"])
plt.xlabel('Months')
plt.ylabel('Cases')
plt.show()
要修复代码,我认为您需要将
for
-循环中的值存储在一个列表中,并绘制该列表。不要在此行中取t
和I
的最后一个值:
plt.plot(t,I,'r')
尝试创建一个列表,将I
中的值放入,并将该列表提供给plt.plot
函数
这应该起作用:
导入matplotlib.pyplot作为plt
将numpy作为np导入
图=plt.图()
n=4
data=[]#为要附加到的数据创建一个列表
对于范围(1193)内的t:
I=t**n
如果(t%30==0):
n/=2
数据。追加(I)#将数据追加到列表中
plt.plot(data,'r')#绘制列表中的数据
plt.xticks([0,10,41,71,101,132,163],
[“一月”、“二月”、“三月”、“四月”、“五月”、“六月”、“七月”])
plt.xlabel(“月”)
plt.ylabel(“案例”)
plt.show()
这应给出以下曲线图:
代码的第一个问题是
^
运算符。
在Python中,它是XOR运算符,而我认为
需要电源操作员(**
)
代码中的另一个缺陷是,当您想要创建绘图时,必须
组合x和y值,然后调用plt.plot传递这两个列表
但是您在循环中计算各自的值,并在
“单个”变量(不附加到数组)
需要纠正的另一点是t(一个包含x值的数组)可以
一次生成一个Numpy数组(t=np.arange(…),然后
根据t和n的当前值生成I(作为列表)
因此,请将代码更改为:
import numpy as np
n = 4
t = np.arange(1, 194)
I = []
for tt in t:
I.append(tt ** n)
if (tt % 30 == 0):
n /= 2
plt.plot(t, I, 'r')
代码的其余部分-如您的帖子中所示
如果包含x个值的数组包含从
从0开始,可以调用plt.plot(I,'r'),省略t。
但是因为t是从1开始的,所以我不能这样做(会有
x轴上的“偏移1”)
编辑
为了得到半对数比例的图片,正如你在一篇评论中所写,
运行:
而不是
plt.plot(…)
您确定没有收到错误吗?在python3.8.5中,我得到了一个TypeError:int和float不支持的操作数类型。实际上我已经上传了这个页面。请查查。嘿!非常感谢,但实际上n并不总是应该是int。我希望n的值是4,2,1,1/2,1/4。。。在覆盖整个范围之前,我认为它将是t**n而不是t^n@Additi.P我已经更新了答案来回答你的更新问题,非常感谢!得到了我想要的半对数比例的精确图表,多亏了洛蒂的支持,但这不算我的支持率,因为我的声誉不到15
plt.semilogy(t, I, 'r')