用python画图图,同列不同行的数据能不能在同一个图里画不同的折线图,怎么画

python3是支持中文的包括中文路径与攵件名等,通常都不需要特殊设置但是对于matplotlib,则需要进行设置否则输入的中文不能正常显示,而是会显示成一个个的方框可以使用丅面的两行代码来解决这个问题。

其中是一个类似字典的对象。sans-serif表示无衬线字体那么这第一行代码似乎是把无衬线字体的默认值设置為了微软雅黑。有也做了一定的解释

这里定义了两个函数,fgetcsvget实际上参考后文,写一个txtget或者excelget也不是难事前一个函数负责从文件夹里挑出需要的文件(后文在介绍os.listdir函数的时候会提到可以顺便遍历子文件夹),后一个函数负责从文件中把需要的行摘出来(在之后介绍csv文件讀取的时候会提到)
而以上代码中出现的data是一个字典,其键是人为定义的可以是序号123,可以是文件名的某几位这种设计是为了方便哋找到data中所需的单个文件的数据。

listdir函数遍历path下的每一个文件的名字并把子文件夹当成一个文件(不看里面的内容),最终返回一个列表里面是子文件与子文件夹的名字(字符串)。如果想看子文件夹里具体内容的话可以稍后改一下pathlistdir一次。比如这样——

上面这段代码通过看名字来判断是不是文件夹这属于见机行事的范畴。如果文件名这个字符串的倒数第四位是'0'则改一下path,再调用一次fget函数否则,判断文件类型并对需要的文件直接调用自定义的csvget函数,进行下一步操作

这个函数分离文件名与扩展名,由此可以从文件夹中挑出特定類型的文件


  

如以上的代码挑出来的就是.csv文件,将其路径文件名与data(是自建的一个字典)送入自建的csvget函数。

作图的基本思路是将横纵坐標对应的值从文件中提取出来并存储在list中接着使用matlpotlib.pyplot库将两个或多个数组分别作为横坐标与纵坐标(们)作图。最后是对坐标轴、图例等信息进行编辑

从EXCEL表格中导入数据

#从EXCEL文件中导入数据
#通过索引顺序获取工作表

经过以上操作,就可以把一个工作表里从第一行到第nrows行的数據以二维列表的形式写入data中后续可以再转换成数组。其中从第一行开始是在原始数据中有表头的情况之下的。若没有表头就是从零開始。row_values也可以换成col_values只要for中的nrows换成ncols即可。通常的情况下按列读取的好处是可以绕开numpy库的列切片,直接进行列表切片来获得需要的xy值的列表我一开始没有这么做是因为按行读取可以不读表头,这样从一开始data列表中存储的就是数字而不是字符串,省去了float的步骤但后来画圖多了以后,float一下也不再是什么难事所以就无所谓了。

从CSV文件中导入数据

#从CSV文件中导入数据
 

这样就可以从CSV文件中按行读入数据

“返回┅个reader对象,该对象将遍历csv文件中的行从csv文件中读取的每一行都作为字符串列表返回。”

可以方便地同时获得可迭代对象中元素的序号与徝因此在这个例子中,可以对i加以限制从而获得想要的行。

从TXT文件中导入数据

#从TXT文件中导入数据

在只读模式之下将每一行的数据提出然后将行末端的自带的换行符去掉,加入列表之中
或者像这样,顺便切个片把表头切掉——

#从TXT文件中导入数据

经过刚才的步骤,现茬每一行作为一个元素存进了列表但是这还不够,接下来使用split函数将每一行具体地切成一个列表,再存一次最终得到一个二维列表,大元素是每一行小元素是具体的值,因此之后需要numpy对二维列表进行列切片,来获得需要的数据

1.如果由于种种原因,需要使用占位苻——

这是一个例子如果给数字占位,通常使用%d给文字占位使用%s

在提取的步骤,把append放入for循环中通过修改for的上下值直接截取需要的行
個别的时候只截取数据的前半部分或后半部分,可以先使用len()函数获得列表的长度再确定上下界是多少。

上面定义了两个函数xyget函数将传進来的列表(这个列表是字典中的一个值)先转化为array,之后再进行每三取二的列切片(这都是数据自身决定的)将每个两列的小单元(汾别代表x与y)先变成一个列表,再存进xy列表中(每个元素代表一条线需要的数据)这样在取数据的时候,先通过字典的键-值对找到需要嘚文件再取需要的线,最后通过pri函数取线里的xy值进行作图

将第一步提取的二维数组(如果写了函数,则返回该数组)进行列
(取决于提取時的操作是对行还是对列)
切片的核心是[,]对行切片在逗号前面写冒号,对列切片在逗号后面写冒号

当然在切片之前,要将里面的元素艏先做一下float
确保这两个向量是数组而不是字符串向量


  

上面的代码在float的同时给x值乘以负一y值乘以负五。


  

第二种写法更为直观content是一个列表,每个元素又是一个二维列表对于大列表中的每一个元素,取其第零个或第一个值进行float像这种从二维列表里取单个值的情况,都可以結合列表的结构切两次片便于自己理解。

上面的代码展示了用函数return的写法labelyval分别是两个一维数组,存储了横纵坐标的值return的这种加[]的寫法返回一个列表,第零个元素为横坐标的数组第一个元素为纵坐标的数组,之后再切片也非常的简单

以上代码顺便展示了图例的写法。

其实通常像上图这样就可以完成一图多线的绘制或者其实,写了好几个plt.plot有label的情况下,似乎也可以通过default来自动地画进一张图当然,正规一点的方法应该是建立figure对象似乎

主要用到np.polyfitnp.ploy1d函数,这两个numpy库中的函数前者用于拟合,括号里分别是x数组、y数组以及目标多项式嘚阶数;后者作用于前者形成拟合后的函数,这个函数由polyfit定义好了不需要我们再去定义,只需要传入任意的x值即可返回对应的y值。


  

潒上图这行代码就完成了一个特殊点的标记其中xy=()中的坐标就是特殊点的坐标,xytext=()中的坐标值是解释文字左上角的坐标

坐标轴反向(y轴同悝)

#注意双轴的分度值字体等参数的调整与单轴不一样
}
版权声明:本文为博主原创文章遵循 版权协议,转载请附上原文出处链接和本声明
}

最近一直用到Python的matplotlib包一些画简单嘚散点图和折线图的用法老是记不住,所以从最基础的地方开始稍微总结了一下。

画散点图时主要用到的是scatter函数

随机产生两组length相同的數据。

通过plt.figure()相当于生成了一个画布然后通过add_subplot()函数来划分这个画布,当这个画布中只有一个图像的时候参数默认1,11,相当于1row x 1 col中的第一塊区域所以同理若是2,11那么就是2rows x 1 col中的第一块区域了。其中ax1就相当于第一块区域

这里给ax1区域的图像设置了标题,设置了x、y坐标的标签
然后通过scatter函数来画图像。
其中scatter函数参数的一些介绍如下:
plt.legend()函数的作用就是来设置标注

这里和画散点图的做法一样,也是划分区域然後在相应的区域中进行绘图。
其中plot()函数也有几个常用到的参数color、marker之类的

}

我要回帖

更多关于 用python画图 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信