科研04——python如何利用列表的数据画图
- 放一个代码,以后方便
- 关于从csv文件中导出数据来画图
- 画点图
- 画柱状图
放一个代码,以后方便
import matplotlib.pyplot as plt
def draw_number(step, number_V2V, number_V2I, number_finished, number_number_all_taskd):
plt.rcParams['font.sans-serif'] = ['SimHei']#用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False#用来正常显示负号
# plt.bar(step,cost, color="red")
# plt.plot(step,cost)
plt.plot(step, number_finished, color = "red", label = "已经完成的任务个数")
plt.plot(step, number_V2V, color = "blue", label = "offload给车的任务个数")
plt.plot(step, number_V2I, color = "green", label = "offload给MEC的任务个数")
plt.plot(step, number_number_all_taskd, color = "orange", label = "总任务个数")
plt.legend()#显示图例
plt.xlabel("step")
plt.ylabel("task_number")
plt.title("随着时间变化的相应的任务个数")
plt.show()#画图
draw_number(stepd, number_V2Vd, number_V2Id, number_finishedd, number_number_all_taskd)
输出结果:
通过上面的输出结果和代码对应着看,很容易理解
关于从csv文件中导出数据来画图
其实无论是画柱状图还是点图,自变量和因变量都应该是一个一维列表,这个要非常明确
但是,如果是从csv文献中读数据来画图,实践中会发现是有一点区别的
画点图
画点图其实和普通的列表画图没什么区别,读出来对应的列,如上一篇文章科研03——python如何对csv文件进行读写操作,读出来address0
和address1
,分别作为自变量和因变量draw_delay(address0, address1)
,就可以正确的画出来点图了
画柱状图
画柱状图却有很大的区别,如果我只是在函数中把点图改成柱状图,函数调用的时候仍然是draw_delay(address0, address2)
的话,那就会报错TypeError: only size-1 arrays can be converted to Python scalars
,这个错误的意思是你这个维度太大了,其实是很好理解的,因为你print(address2)
会发现结果为:
print(address2)
#输出结果
2
0 4.000000
1 3.130000
2 2.646667
3 2.260000
4 2.144000
你会发现这肯定不是一个一维数组
而且,通过print(type(address2))
,你会发现address2
的类型为dataframe
,并非是array
,这样的话就会出问题
print(type(address2))
#输出结果
<class 'pandas.core.frame.DataFrame'>
这个时候应该使用address0.values
,这样子就把这里面的值提取出来了,发现是个二维数组,但是每一行只有一个元素
print(address0.values)
#输出结果
[[1]
[2]
[3]
[4]
[5]]
这时候如果看address0.values
的类型,会发现不一样的,这下就变成熟悉的array
类型
a = address0.values
print(type(a))
#输出结果
<class 'numpy.ndarray'>
这个时候需要把二维数组转化为一维数组,这是个numpy
中很熟悉的操作了,即用flatten方法,如下
print(a.flatten())
#输出结果
[1 2 3 4 5]
这样就转变为一维数组了,可以作为画图时输入的标准格式
因此,最后画柱状图时,总结调用函数的方法,要加后缀来转化
draw_energy(address0.values.flatten(), address1.values.flatten())
draw_delay(address0.values.flatten(), address2.values.flatten())