matplotlib笔记2

颜色和样式

八种内建默认颜色缩写
b:blue g:green r:red c:cyan m:magenta y:yellow k:black w:white
其它颜色表示方法可以参照百度给的值
https://baike.baidu.com/item/%E5%8D%81%E5%85%AD%E8%BF%9B%E5%88%B6%E9
%A2%9C%E8%89%B2%E7%A0%81/10894232?fromtitle=%E9%A2%9C%E8%89%B2%E5%8D
%81%E5%85%AD%E8%BF%9B%E5%88%B6&fromid=15455510&fr=aladdin
灰色阴影
html 十六进制
RGB元组
 1 import numpy as np
 2 import matplotlib.pyplot as plt
 3 
 4 y=np.arange(1,5)
 5 # plt.plot(y,'--',marker='o',color='g')
 6 # '--',marker='o',color='g',分别表示线型,点型,颜色
 7 
 8 # plt.plot(y+1,'-.',marker='D',color='0.5')
 9 # plt.plot(y+2,':',marker='^',color='#FF00FF')
10 # plt.plot(y+3,'-',marker='p',color=(0.1,0.2,0.3))
11 
12 # 可以将颜色,点型,线型写成一个字符串
13 plt.plot(y,'cx--')
14 
15 plt.show()
面向对象 VS Matlab Style

 pyplot:经典高层封装,到目前为止,我们所用的都是pyplotpylab:将Matplotlib和NumPy合并的模块,模拟Matlab的编程环境面向对象的方式:Matplotlib的精髓,更基础和底层的方式

pyplot:简单易用。交互使用方便,可以根据命令实时作图。但底层定制能力不足

pylab:完全封装,环境最接近Matlab。不推荐使用

面向对象(Object-Oriented)的方式:接近Matplotlib基础和底层的方式。难度稍大。

但定制能力强而且是Matplotlib的精髓

总结:实战中推荐,根据需求,总和使用pyplot和面向对象的方式,显示导入numpy

常用模块导入代码:

import matplotlib.pyplot as plt

import numpy as np

 1 import matplotlib.pyplot as plt
 2 import numpy as np
 3 
 4 x = np.arange(0, 10, 1)
 5 y = np.random.randn(len(x))
 6 
 7 fig = plt.figure()
 8 # 面向对象方法,要先建立一个画布
 9 
10 ax = fig.add_subplot(111)
11 # 相当于将要在画布上建立一个一行一列的图,最后数字1表示要画的图在第一个位置
12 # ax = fig.add_subplot(221)
13 
14 f1  = plt.plot(x, y)
15 
16 t = ax.set_title('object oriented')  # 为图命名
17 
18 # plt.plot(x, y)
19 plt.show()

多图

要创建多个画布即应该在代码中每画一个图就需要插入fig=plt.figure()如下代码

 1 import matplotlib.pyplot as plt
 2 # import numpy as np
 3 
 4 figl=plt.figure()
 5 ax1=figl.add_subplot(111)
 6 ax1.plot([1,2,3],[3,2,1])
 7 
 8 fig2=plt.figure()
 9 ax2=fig2.add_subplot(111)
10 ax2.plot([1,2,3],[3,2,5])
11 
12 plt.show()

网格

在画图的时候可以添加背景网格的形式增加图的可读性

 1 import matplotlib.pyplot as plt
 2 import numpy as np
 3 
 4 x = np.arange(0,10,1)
 5 fig = plt.figure()
 6 ax = fig.add_subplot(111)
 7 plt.plot(x,x*2)
 8 
 9 ax.grid(color='g')
10 # 这是要给所画的图添加网格的代码行
11 
12 plt.show()

图例

图例是图表中一种很重要的说明方式,在matplotlib中也可以添加图例

 1 import matplotlib.pyplot as plt
 2 import numpy as np
 3 
 4 x=np.arange(1,11,1)
 5 
 6 # 添加图例的第一种方式
 7 # plt.plot(x, x*2, label='Normal')
 8 # plt.plot(x, x*3, label='Fast')
 9 # plt.plot(x, x*4, label='Faster')
10 
11 plt.plot(x, x*2)
12 plt.plot(x, x*3)
13 plt.plot(x, x*4)
14 plt.legend(['Normal','Fast','Faster'])
15 plt.legend(loc=0)  # 图例放置最优位置,官网上有更多的相关解释
16 plt.legend(ncol=3)  # 图例分三列放
17 
18 plt.show()

坐标轴范围

 1 import matplotlib.pyplot as plt
 2 import numpy as np
 3 
 4 x = np.arange(-10,11,1)
 5 
 6 plt.plot(x,x*x)
 7 
 8 # plt.axis([-5,5,20,60])  # 前两个数字表示x轴范围,后两个数字表示y轴范围
 9 plt.axis([-10,10,0,100])
10 # plt.xlim([-5,5])  # 可以只改变x轴范围y轴不变
11 # plt.ylim([0,60])
12 # plt.xlim(xmin=-5,xmax=5)  # 与plt.xlim([-5,5]) 效果一样
13 plt.xlim(xmin=-5)  # 只改变x轴一端的范围
14 plt.show()

坐标轴刻度

 1 import matplotlib.pyplot as plt
 2 import matplotlib as mpl
 3 import numpy as np
 4 import datetime
 5 x = np.arange(1,11,1)
 6 plt.plot(x,x)
 7 ax=plt.gca()  # 表示获取当前的坐标轴,对坐标轴操作需要添加此行
 8 
 9 # ax.locator_params('x',nbins=5)
10 # 给x轴添加刻度
11 
12 ax.locator_params('y', nbins=5)
13 # 给y轴添加刻度
14 
15 # 下面是x轴的日期刻度标注方法
16 fig=plt.figure()
17 start=datetime.datetime(2015,1,1)
18 stop=datetime.datetime(2016,1,1)
19 delta=datetime.timedelta(days=1)
20 
21 dates = mpl.dates.drange(start,stop,delta)
22 y=np.random.rand(len(dates))
23 ax=plt.gca()
24 ax.plot_date(dates,y,linestyle='-',marker='')
25 
26 date_format=mpl.dates.DateFormatter('%Y-%m')
27 ax.xaxis.set_major_formatter(date_format)  # xaxis表示在x轴添加日期刻度
28 fig.autofmt_xdate()  # 由于日期的数字过长,所以需要matplotlib自动优化摆放方式
29 
30 plt.show()

添加坐标轴

 1 import matplotlib.pyplot as plt
 2 import numpy as np
 3 
 4 x=np.arange(2,20,1)
 5 y1=x*x
 6 y2=np.log(x)
 7 
 8 # 这是添加y轴
 9 # plt.plot(x,y1)
10 # plt.twinx()  #创建一个双胞胎x轴
11 # plt.plot(x,y2,'r')
12 
13 # 这是添加x轴
14 plt.plot(y1, x)
15 plt.twiny() #创建一个双胞胎y轴
16 plt.plot(y2, x, color='r')
17 
18 
19 # 这是用面向对象的方式添加坐标轴
20 # fig = plt.figure()
21 # ax1 = fig.add_subplot(111)
22 # ax1.plot(x,y1)
23 # ax1.set_ylabel('Y1')
24 # ax2=ax1.twinx()
25 # ax2.plot(x,y2,'r')
26 # ax2.set_ylabel('y2')
27 # ax1.set_xlabel('Compare Y1 and Y2')
28 
29 
30 
31 plt.show()


原文地址:https://www.cnblogs.com/yang901112/p/11420794.html