颜色和样式
八种内建默认颜色缩写
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()