科研04——python如何利用列表的数据画图

放一个代码,以后方便

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文件进行读写操作,读出来address0address1,分别作为自变量和因变量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())  
  • 2
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值