初识Matplotlib-01

时间:2019-09-25
本文章向大家介绍初识Matplotlib-01,主要包括初识Matplotlib-01使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

初识数据分析

   大数据是一个含义广泛的术语,是指数据集,如此庞大而复杂的,他们需要专门设计的硬件和软件工具进行处理。该数据集通常是万亿或EB的大小。这些数据集收集自各种各样的来源:传感器,气候信息,公开的信息,如杂志,报纸,文章。大数据产生的其他例子包括购买交易记录,网络日志,病历,军事监控,视频和图像档案,及大型电子商务。

在大数据和大数据分析,他们对企业的影响有一个兴趣高涨。大数据分析是研究大量的数据的过程中寻找模式,相关性和其他有用的信息,可以帮助企业更好地适应变化,并做出更明智的决策。

  

Matplotlib教程

  介绍

  Matplotlib是一个Python 2D绘图库,它以多种硬拷贝格式和跨平台的交互式环境生成出版物质量的图形。Matplotlib可用于Python脚本,Python和IPython Shell,Jupyter notebook,Web应用程序服务器和四个图形用户界面工具包。

                                                         

Matplotlib尝试使容易的事情变得容易,使困难的事情变得可能。您只需几行代码就可以生成图表,直方图,功率谱,条形图,误差图,散点图等

为了简单绘图,该pyplot模块提供了类似于MATLAB的界面,尤其是与IPython结合使用时。对于高级用户,您可以通过面向对象的界面或MATLAB用户熟悉的一组功能来完全控制线型,字体属性,轴属性等。

安装

  用conda来安装

  我们使用conda软件包来满足所有要求,在conda安装期间不需要,设置conda环境。在Anaconda Prompt下执行conda命令安装matplotlib包。执行命令是: 

   

1  conda install matplotlib 

  安装完成之后,就可以在命令窗口或者Anaconda Spyder编程环境使用Matplotlib绘制数学图形

使用指南

  本教程介绍了一些基本的用法模式和最佳实践,以帮助您开始使用Matplotlib。

一般概念

  matplotlib具有广泛的代码库,可能会使许多新用户望而却步。但是,大多数matplotlib可以通过相当简单的概念框架和一些要点的知识来理解。

绘制需要在一系列级别上进行操作,从最普通的级别(例如,“使此二维数组轮廓化”)到最具体的级别(例如,“将该屏幕像素着色为红色”)。绘图程序包的目的是通过所有必要的控制来帮助您尽可能轻松地可视化数据-即,大多数时间通过使用相对高级的命令,并且仍然能够使用较低级别的命令。级别的命令(如果需要)。

因此,matplotlib中的所有内容都是按层次结构组织的。层次结构的顶部是matplotlib.pyplot模块提供的matplotlib“状态机环境” 在此级别上,使用简单功能将绘图元素(线,图像,文本等)添加到当前图形中的当前轴。

注意

Pyplot的状态机环境的行为类似于MATLAB,对于具有MATLAB经验的用户应该最熟悉。

axis轴指的是x或者y这种坐标轴(图形的表示如下图所示)

Matplotlib,pyplot和pylab:它们之间有何关系?

Matplotlib是整个软包,matplotlib.pyplotMatplotlib中的模块。

对于pyplot模块中的功能,始终有一个“当前”图形和轴(根据要求自动创建)。例如,在下面的例子中,在第一次调用plt.plot创建轴,则后续调用plt.plot在同一坐标添加额外的线,以及 plt.xlabelplt.ylabelplt.titleplt.legend设置轴标签和标题和添加的图例。

 1 x = np.linspace(0, 2, 100)
 2 
 3 plt.plot(x, x, label='linear')
 4 plt.plot(x, x**2, label='quadratic')
 5 plt.plot(x, x**3, label='cubic')
 6 
 7 plt.xlabel('x label')
 8 plt.ylabel('y label')
 9 
10 plt.title("Simple Plot")
11 
12 plt.legend()
13 
14 plt.show
 

pylab是一个便捷模块, 在单个名称空间中批量导入 matplotlib.pyplot(用于绘图)和numpy用于数学以及使用数组)。pylab已过时,并且由于命名空间污染而强烈不建议使用pylab。使用pyplot代替。

对于非交互式绘图,建议使用pyplot创建图形,然后使用OO接口进行绘图。

折线图(基础绘图)

  初识应用:假设一天中每隔两个小时(range(2,26,2))的气温(C)分别是T = [15,13,14.5,17,20,25,26,26,27,22,18,15]

1 import matplotlib.pyplot as plt#(导入plt)
2 #可视化的x轴的坐标即数据在x轴的位置
3 x = range(2,26,2)
4 #数据在y轴的位置,是可迭代对象 
5 #x轴和y轴的数据一起组成了所有要绘制出的坐标 分别是(2,15),(4,13),(6,14.5)。。。。。
6 y = [15,13,14.5,17,20,25,26,26,27,22,18,15]
7 plt.plot(x,y)#传入x和y,通过plot绘制出折线图
8 #在执行程序的时候展示图形
9 plt.show()

我们自己能看懂图的意思,但是别人看得懂吗?     接下来我们可以做的更多!!!

    1、设置图片大小(高清无码大图)

    2、保存到本地

    3、描述信息,x轴y轴表示什么,这个图表示什么?

    4、调整x、y轴的刻度的间距

    5、线条的样式(颜色、透明度啊)

    6、标记出特殊的点(比如最高点最低点)

    7、给图片加上水印(告诉别人这是我自己专属的)

 1 import matplotlib.pyplot as plt#(导入plt)
 2 #可视化的x轴的坐标即数据在x轴的位置
 3 x = range(2,26,2)
 4 #数据在y轴的位置,是可迭代对象 
 5 #x轴和y轴的数据一起组成了所有要绘制出的坐标 分别是(2,15),(4,13),(6,14.5)。。。。。
 6 y = [15,13,14.5,17,20,25,26,26,27,22,18,15]
 7 #设置图片大小
 8 plt.figure(figsize=(15,6),dpi=80)#figure图形图表的意思,在这里值得是我们画的图
 9 #通过实例化一个figure并且传入参数,能够在后台自动使用figure实例
10 #在图片模糊的时候可以传入dpi参数,让图片更加清晰
11 #x轴的刻度是系统自动分配所以我们想自己显示我们想要的刻度
12 #即传入x这个x可以是自己自定义的
13 plt.xticks(x)
14 #y轴与x轴一样
15 plt.yticks(range(min(y),max(y)+1))
16 plt.plot(x,y)#传入x和y,通过plot绘制出折线图
17 #保存
18 plt.savefig("./tep.png")#可以保存为.svg这种矢量图格式,放大不会有锯齿,即不会失真
19 #在执行程序的时候展示图形
20 plt.show()
图片大小、刻度、保存

那么问题来了:如果列表a表示10点到12点的每一分钟的气温,如何绘制折线图观察每分钟气温的变化情况? a = [random.randint(20,35) for i in range(120)]

 1 import matplotlib.pyplot as plt
 2 import random
 3 plt.rc('font', family='SimHei', size=14)  ##显示中文
 4 
 5 #size=7 表示中文字体大小,根据自己需要调整
 6 
 7 #设置显示中文的字体 fc-list :lang=zh linux mac os
 8 
 9 
10 #因为y要对应x的个数所以应该有120次的y值
11 y = [random.randint(20,35) for i in range(0,121)]
12 x = range(0,121)
13 #画布大小 还有高清度
14 plt.figure(figsize=(20,10),dpi=100)
15 
16 _xticks_lable = ["10点{}分".format(i) for i in range(60)]
17 _xticks_lable += ["11点{}分".format(i) for i in range(61)]
18 
19 #第一个参数x轴显示的刻度  第二个参数是x轴显示字符串 第三个参数是显示字符串的旋转角度(发现中文显示不出来,因此需要设置显示的字体)
20 plt.xticks(list(x)[::3],_xticks_lable[::3],rotation=45)
21 
22 #这个设置y轴显示的步长
23 plt.yticks(range(0,40))
24 #给我的图形标题
25 plt.title("10点到12点每分钟温度变化情况")
26 #横坐标显示的标签
27 plt.xlabel("时间")
28 #纵坐标显示的标签
29 plt.ylabel("温度(℃)")
30 #画图
31 plt.plot(x,y)
32 #显示屏幕上
33 plt.show()

注意:显示中文不同的系统方法不一样

动动手

   假设大家在30岁的时候,根据自己的实际情况统计出来了从11岁到30岁每年交的女(男)朋友的数量如列表a,请绘制出该数据的折线图,以便分析自己每年交女(男)朋友的数量走势
a = [10,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]    要求:

                     y轴表示个数
                     x轴表示岁数,比如11岁,12岁等

 1 import matplotlib.pyplot as plt
 2 plt.rc("font",family="SimHei",size=14)
3 x = range(11,30) 4 y = [10,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1] 5 #这三个都是对坐标轴的描述信息 6 plt.title("11岁到30岁每年交女朋友的数量示意图") 7 plt.xlabel("年龄") 8 plt.ylabel("女朋友个数") 9 #这两个是对坐标轴的显示刻度描述 10 xticks_label = ["{}岁".format(i) for i in range(11,31)] 11 plt.xticks(list(x),xticks_label,rotation=45) 12 plt.yticks(range(11)) 13 plt.plot(x,y) 14 plt.show()

 


假设大家在30岁的时候,根据自己还有同桌的实际情况统计出来了从11岁到30岁每年交的女(男)朋友的数量如列表a,请绘制出该数据的折线图,以便分析自己和同桌每年交女(男)朋友的数量走势 要求: y轴表示个数 x轴表示岁数,比如11岁,12岁等[1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,11]b = [1,0,3,1,2,2,3,3,2,1,1,1,1,1,1,1,1,1]

绘图的时候(plt.plot)需要自定义风格就需要如下参数展示的

代码展示如下

 1 import matplotlib.pyplot as plt
 2 plt.rc("font",family="SimHei",size=14)
 3 
 4 x = range(11,31)
 5 y1 = [1,0,1,1,2,4,3,2,3,4,4,5,6,5,4,3,3,1,1,1]
 6 y2 = [1,0,3,1,2,2,3,3,2,1,1,1,1,1,1,1,1,1,1,1]
 7 #画布加上x y轴的标签名字
 8 a1 = plt.figure(figsize=(20,8),dpi=80)
 9 plt.title("我和同桌11岁到30岁每年交女朋友的数量示意图")
10 plt.xlabel("年龄")
11 plt.ylabel("女朋友个数")
12 #x y 轴刻度
13 _xticks_label = ["{}岁".format(i) for i in range(11,31)]
14 plt.xticks(x,_xticks_label)
15 plt.yticks(range(8))
16 
17 #为了更好的观看 添加网格效果  可以加颜色(16进制) 线的款式 线条粗细linewidth  透明度alpha
18 plt.grid(alpha=0.5,linestyle="-.")#参数alpha 0到1之间调动
19 
20 #画出来  可以加颜色 线的款式 线条粗细linewidth  透明度alpha
21 plt.plot(x,y1,label="自己",color="orange",linestyle=":")
22 plt.plot(x,y2,label="同桌",color="cyan",linestyle="--")
23 
24 #添加图例  更好观看折线谁是谁 更加客观看懂
25 plt.legend(loc="upper left")#可以放置图例的位置数字0-10或者看源码输入 
26 #展示
27 plt.show()

 扩展:在上一个案例中,假设你希望在图中标记出自己和同桌交女朋友最多的那一年所对应的数据,那么应该怎么做?(添加文本注释)

    在上一个案例中,假设你打算把自己的统计结果发布到网上供人瞻仰,但是很担心自己的图片被人盗用,你该怎么做?(加水印)

原文地址:https://www.cnblogs.com/lishuntao/p/11581648.html