python画简单图片-Python 画个图

先放上最后的结果图(数据画的有点丑,随便看看就好了):

1196548-20180902001019442-242286052.gif

功能描述:

这个脚本主要的作用就是监视指定文件夹中(示例中在脚本所在文件夹下)指定文件这里就是csv文件中的数据做折线图;再将这一系列的图保存成一个gif动图。

数据展示:

1196548-20180902001251149-1850620476.png

注:由于在写脚本的时候没法在文件夹中自动生成相关文件,所以就自己手动编了4个test.csv格式的数据,数据结构如上图所示。图中的数据虽然有三行,但是用pandas导入进python后第一行将会被默认为数据框的列名;所以后面取出来能用的数据就只有两行而已,就是两个点,在上面的动图中就只有前面几帧是这个数据贡献的

脚本源码:

生成 png 文件脚本:

1 #!/usr/bin/python3

2 #-*- coding: utf-8 -*-

3 importpandas as pd4 importmatplotlib.pyplot as plt5 importos6 importtime7

8 #这个函数是用来画图的,循环的画图,这样显示的时候就是连续的动图状态

9 defplot(x1,y1,jj):10 xx =[]11 yy =[]12 for t inrange(len(x1)):13 xx.append(x1[t]) #取一个新的 x 值加入到 x 坐标数组中

14 yy.append(y1[t]) #取一个新的 y 值加入到 y 坐标数组中

15 ax.plot(xx, yy, c = 'b', marker='.', ms = 9) #画图

16 plt.pause(1) #暂停一秒

17 name = jj + "_" + str(t) + ".png"

18 plt.savefig(name) #保存为 png 格式的图片文件

19

20 #下面这些参数主要是对图等一系列参数进行规范化,这边可以使得后面的

21 #单个图除内容外边框大小等参数都是一样的

22 plt.close()23 fig=plt.figure()24 ax=fig.add_subplot(1,1,1)25 ax.axis("equal")26 plt.grid(True)27 plt.ion()28

29 #获得x, y数值用来画图部分

30 list_f = [] #用来保存文件夹下已有的 csv 文件名

31 x_0 = [0] #图上原点的 x 坐标

32 y_0 = [0] #图上原点的 y 坐标

33

34 whileTrue:35

36 list_temp =[]37 list_new =[]38 time.sleep(1) #正式使用时需改成适当的间隔时间

39

40 files = os.popen("ls").read() #获取 csv 文件名

41 for i infiles.splitlines():42 if os.path.splitext(i)[1] == ".csv":43 list_temp.append(i)44

45 #两个数组求差集,获得更新的文件名

46 list_new = list(set(list_temp) ^set(list_f))47 iflist_new:48 list_f = list_f +list_new49 #print(list_new)

50 for j inlist_new:51 x =[]52 y =[]53 data = pd.read_csv(j).T #读入新的 csv 文件

54 x = list(data.iloc[0].values) #取 X 值

55 y = list(data.iloc[1].values) #取 Y 值

56 x.insert(0,x_0[0]) #加上原点坐标

57 y.insert(0,y_0[0]) #同上

58 #print(x)

59 #print(y)

60 plot(x,y,j) #画图

61 x_0[0] = x[-1] #更新 X 中的初始坐标

62 y_0[0] = y[-1] #更新 Y 中的初始坐标

63 #print("X0=",x_0,"; Y0=",y_0)

这个脚本中还有一部分是在写的时候没有考虑到的内容,在真实情况下一个生成的 csv 文件很可能其中的数据内容还在一直的更新,所以建议可将脚本中的相关部分改成,当大于两个 csv 文件时才开始画第一个 csv 中的数据(这种方法是针对所运行的程序将依次产生多个 csv 数据文件时),或者读取 csv 文件中的数据行数,在达到一定行数后,便开始画图(此部分需要将上面的脚本进行较大的改动)。

生成 GIF 文件代码:

1 #-*- coding:utf-8 -*-

2 importimageio, os3

4 defgif(path):5

6 cmd = "ls" +path7 files =os.popen(cmd).read()8 list_temp =[]9

10 for i infiles.splitlines():11 if os.path.splitext(i)[1] == ".png":12 list_temp.append(i)13 list_temp.sort(key = lambda fi:os.path.getmtime(path +fi))14

15 '''

16 上述代码部分主要是得到一个名为list_temp的数组,储存该文件夹下所有17 png文件的文件名18 '''

19

20 #imageio 模块生成 gif 文件

21 images =[]22 for file_n inlist_temp:23 images.append(imageio.imread(file_n))24 imageio.mimsave('test.gif', images, duration=1)25

26 #运行上面的函数

27 if __name__ == '__main__':28 pathway = "/Users/xxxxx/" #文件夹地址

29 gif(pathway)30

31 #后面两句注释的语句属于可选部分,作用就是

32 #在生成 gif 文件后将原始 png 文件全部删除

33 #rm = "rm " + pathway + "*.png"

34 #os.system(rm)

上述两个脚本代码可以写在同一个文本中,只需要在监视画图的脚本中加入终止跳出机制即可。

上面两个脚本中可能还存在很多错误,欢迎指证。

未经许可,严禁转载 !!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值