初次尝试用matplotlib来绘制csv文件
前言
这是我的第一篇博客,作为非专业小白,就当是给自己做的一次笔记了。
之前没有接触过这方面的任务,所以就带着探索、学习的心态来绘制了。
参考资料
1、首先是matplotlib的官方guidehttps://matplotlib.org/stable/tutorials/introductory/usage.html#sphx-glr-tutorials-introductory-usage-py,这里有最清晰的plot概念,很适合新手小白。
2、其次是一个youtube视频,题目就是要解决的任务。https://www.youtube.com/watch?v=MNLmQJtCCZY
3、视频看到一半觉得差不多懂了,就查询numpy的loadtxt函数,也是本任务的核心。https://numpy.org/doc/stable/reference/generated/numpy.loadtxt.html?highlight=loadtxt#numpy.loadtxt
任务处理
读取数据
如图所示,csv文件前几行是一些描述信息,可以不用处理。必要的是第一列以及后五列的数字(以第一列为x轴数据,后几列为y轴)。
那么就需要利用到numpy.loadtxt这个函数的一些性质了。但是在看官方给的事例时,发现有些dtype类型不懂:(见下图倒数第一行)
于是在csdn上查询了什么dtype的各个符号代表啥意思:
其实对应起来都很好理解这些数据类型。
针对本次任务,loadtxt函数中有一些参数是我们需要注意的:
delimiter:就是区分你数据的符号,相当于python中的.split( )。一般来说我们会使用delimiter = ',' , 即字符','被用作分割数据。
skiprows:顾名思义,跳过前几个行。在我的事例中,我需要跳过前5行,因此输入参数5(为啥是5不是4,是我自己试出来的……)。
usecols:挑选有用的列。那么在本例中应该写成(0,6,7,8,9,10)
unpack:这个是看油管的讲解的。将unpack设置为True,可以使返回的参数成一个array,而不是python最常用的数据类型列表。(可能我理解不对,如有错欢迎指出)
那么对应的代码可以写成:
import matplotlib.pyplot as plt
import numpy as np
time, d1, d2, d3, d4, d5 = np.loadtxt('20210120_A1.csv',#这是文件名
unpack=True,
delimiter=',',
skiprows=5,
usecols=(0,6,7,8,9,10))
#检测一下自己有没有写错
print(time)
print(d1)
画图
由于我们想要的数据已经读取出来了,下一步就是要将它们画出来。
我这里因为只要画一个图,因此采用最简单的方式。
#官方说法
fig = plt.figure() # an empty figure with no Axes
fig, ax = plt.subplots() # a figure with a single Axes
于是接下来的操作也很简单,如下代码:
# Note that even in the OO-style, we use `.pyplot.figure` to create the figure.
fig, ax = plt.subplots() # Create a figure and an axes.
ax.plot(time, d1, label='spot1') # Plot some data on the axes.
ax.plot(time, d2, label='spot2') # Plot more data on the axes...
ax.plot(time, d3, label='spot3') # ... and some more.
ax.set_xlabel('time') # Add an x-label to the axes.
ax.set_ylabel('displacement') # Add a y-label to the axes.
ax.set_title("Dynamic Dis") # Add a title to the axes.
ax.legend() # Add a legend.
plt.show()#show the picture
对于我的数据,有以下结果:
由于数据太过接近,只显示出了绿色的spot3数据,但是有不明显的黄色及蓝色数据点。
结语
由于我没有更高阶的需求,像是改变图片的大小、图片的像素、保存、数据刻度等等这些功能都没有展示出来。
希望我能够帮助到你,感觉记笔记也是个很好的归纳过程,也推荐大家尝试尝试:>