我是小白,以前没学过编程。就是我想要生成大量的横坐标是路程S,纵坐标是速度V的曲线,我的思路是利用for循环生成很多个列表(代码里我是每循环一次,生成一次S_table,和V_table这两个列表);
因为想要把这些曲线画在一张图里,然后我把S_table,和V_table分别存到S_list和V_list中,这样就会有很多个小列表(S_table,和V_table)存在大列表(S_list和V_list)中,再用matplotlib绘制(S_list和V_list),这样其中的小列表(S_table,和V_table)就会一一对应,绘制出来。但是我发现plt画不出来,我找到原因其中一个也许是S_table,和V_table是空列表,我不知道为什么会是空列表,我觉得思路是没问题的呀,有谁可以指点指点我,或者提供一个更好的思路吗?代码如图1。
注:4-6行,11-34行是一下物理参数,a代表加速度,b代表减速度,我验证过了公式之间和生成的数据是没问题的,我抛开我弄列表的思想,单独绘制一条曲线是可行的,如图2。
错误在于这两行:
for b_1 in np.arange(-0.5, -1.0, 0.1):
for b_2 in np.arange(-0.5, -1.0, 0.1):
步长写错了,这样返回结果为None
步长应该是-0.1,代码这样改写一下:
import numpy as np
import matplotlib.pyplot as plt
s_v1=500
s_v3=500
s_all=2000
for a_1 in np.arange(0.5,1.0,0.1):
for a_2 in np.arange(0.5,1.0,0.1):
for b_1 in np.arange(-1.0, -0.5, 0.1):
for b_2 in np.arange(-1.0, -0.5, 0.1):
for v1 in np.arange(10,15,1):
for v2 in np.arange(15,20,1):
for v3 in np.arange(10,15,1):
t1=(v1-0)/a_1
t2=(s_v1-t1*v1/2)/v1
t3=(v2-v1)/a_2
t7=(0-v3)/b_2
t6=(s_v3-t7*v3/2)/v3
t5=(v3-v2)/b_1
t4=(s_all-s_v3-s_v1-(v1+v2)*t3/2-(v2+v3)*t5/2)/v2
s1=t1*v1/2
s2=v1*t2+s1
s3=(v1+v2)*t3/2+s2
s4=v2*t4+s3
s5=(v2+v3)*t5/2+s4
s6=v3*t6+s5
s7=v3*t7/2+s6
s_list=[0, s1, s2, s3, s4, s5, s6, s7]
v_list=[0, v1, v1, v2, v2, v3, v3, 0]
plt.plot(s_list,v_list)
plt.show()
才能保证列表不为空,并将plot函数放入循环,画出多条曲线(由于循环嵌套过多,运行较慢较卡)。
运行结果:
如果解答对你有用,请点击一下我回答的右上方采纳按钮支持一下。
明确一下需求:你想要的是,两个列表,每个列表包含多个曲线列表,
最终在一个figure上绘制出了多条曲线?
如何在一个figure里面绘制多条曲线,
如:
```python
# -*- coding: UTF-8 -*-
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
#这里导入你自己的数据
#......
#......
#x_axix,train_pn_dis这些都是长度相同的list()
#开始画图
sub_axix = filter(lambda x:x%200 == 0, x_axix)
plt.title('Result Analysis')
plt.plot(x_axix, train_acys, color='green', label='training accuracy') # 曲线1
plt.plot(sub_axix, test_acys, color='red', label='testing accuracy') # 曲线2
plt.plot(x_axix, train_pn_dis, color='skyblue', label='PN distance') # 曲线3
plt.plot(x_axix, thresholds, color='blue', label='threshold') # 曲线4
plt.legend() # 显示图例
plt.xlabel('iteration times')
plt.ylabel('rate')
plt.show()
#python 一个折线图绘制多个曲线
具体操作如下:
你可以在循环里面这43~44行两行代码修改如下:
s_list.append(s_table)
v_list.append(v_table)
修改为:
plt.plot(s_table, v_table, color='green', label='training accuracy')
同时删除原代码第46行
plt.plot(s_list,v_list)
你想要证实你的猜想的话你可以print(s_list), print(v_list)来看看是不是有空值列表在里面,或者for循环看看有没有小列表的长度为0,如果是的话你就看看可能你的一些循环跳过存值的过程,不是的话你就要从其他方面来想一想了,有用的话点一下采纳