matplotlib是基于python语言的开源项目,为python提供了一个数据绘图包。
散点图显示两组数据的值,每个点的坐标位置由变量的值决定。 由一组不连接的点完成,用于观察两种变量的相关性。
股票散点图
open,close=np.loadtxt('000001.csv',delimiter=',',skiprows=1,usecols=(1,4),unpack=True) change=close-open yesterday=change[:-1] today=change[1:] plt.scatter(today,yesterday) plt.show() s=200 marker='v' c='green' alpha=1 plt.scatter(x, y1, s=50, marker='o', c='red', alpha=0.5)#s是面积的意思,调节点的面积,c为颜色,marker为点的形状。alpha为透明度 plt.show() open,close=np.loadtxt('000001.csv',delimiter=',',skiprows=1,usecols=(1,4),unpack=True) change=close-open yesterday=change[:-1] today=change[1:] plt.scatter(yesterday,today,s=500,c='r',alpha=1) plt.show()折线图使用直线段将各个数据连接起来组成的图形 常用来观察数据随时间变化的趋势 如股票价格,温度变化等。
import numpy as np import matplotlib.pyplot as plt #日期数据比较特殊,转化为matplotlib可以识别的数据 import matplotlib.dates as mdates date,open,close = np.loadtxt('000001.csv',delimiter=',',converters={0:mdates.bytespdate2num('%m/%d/%Y')}, skiprows=1,usecols=(0,1,4),unpack=True) plt.plot(date,open) #把x轴转化为时间/改格式 plt.plot_date(date,open,linestyle='--',color = 'red',marker = '<') plt.show()以长方形的长度为变量的统计图表 用来比较多个项目分类的数据大小 通常利用于较小的数据集分析:不同季度销量等 单变量垂直方向:
import numpy as np import matplotlib.pyplot as plt N=5 y=[20,10,30,25,15] index = np.arange(N) p1 = plt.bar(x=index,height=y,width=0.5,color='red') plt.show()单变量水平方向:
import numpy as np import matplotlib.pyplot as plt N=5 y=[20,10,30,25,15] index = np.arange(N) p1 = plt.bar(x=0,bottom=index,width=y,height=0.5,color='red',orientation='horizontal') #第二种写法 plt.barh(x=0,bottom=index,width=y,height=0.5,color='red') plt.show()双变量水平:
import numpy as np import matplotlib.pyplot as plt index = np.arange(6) x_1 = [52, 69, 58, 12, 39, 75] y_1 = [56, 15, 84, 65, 45, 48] width = 0.3 plt.bar(index,x_1,width,color='b') plt.bar(index+width,y_1,width,color='r') plt.show()双变量堆砌:
import numpy as np import matplotlib.pyplot as plt index = np.arange(6) x_1 = [52, 69, 58, 12, 39, 75] y_1 = [56, 15, 84, 65, 45, 48] width = 0.3 plt.bar(index,x_1,width,color='b') plt.bar(index,y_1,width,color='r',bottom=x_1) plt.show()由一系列高度不等的纵向条形组成,表示数据的分布情况 如某年纪同学的身高分布情况(连续型数组) 单变量直方图
import numpy as np import matplotlib.pyplot as plt mu = 100 # mean of distribution(均值) sigma = 20 # standard deviation of distribution(标准差) x = mu + sigma * np.random.randn(2000)#大小为2000的数组 plt.hist(x, bins=10,color='red',normed=True)#bins代表图里有几个直方 plt.hist(x, bins=50,color='green',normed=False) plt.show()双变量直方图
#双变量直方图 x = np.random.randn(1000)+2 y = np.random.randn(1000)+6 plt.hist2d(x, y, bins=40) plt.show()饼状图显示一个数据系列中各项的大小与各项总和的比例 饼状图中的数据点显示为整个饼状图的百分比 如前十大品牌所占市场份额等。
import matplotlib.pyplot as plt from matplotlib.gridspec import GridSpec # Some data labels = 'A', 'B', 'C', 'D' fracs = [15, 30, 45, 10] explode = (0, 0.05, 0, 0) # Make square figures and axes plt.axes(aspect=1)#x,y轴比例变为1:1 explode = (0.05, 0.05, 0.05, 0.05) #plt.pie(fracs, labels=labels, autopct='%1.1f%%', shadow=True) plt.pie(fracs, explode=explode, labels=labels, autopct='%.0f%%', shadow=True)#autopct加上所占有的值,explode突出的显示某一部分,shadow加阴影 plt.show()箱形图又称为盒须图,盒式图或箱线图 是一种用于显示一组数据分散情况资料的统计图 上边缘,上四分位数,中位数,下四分位数,下边缘,异常值
import numpy as np import matplotlib.pyplot as plt np.random.seed(100) data = np.random.normal(size=1000, loc=0.0, scale=1.0) plt.boxplot(data,sym='o',whis=1.5) plt.show() data = np.random.normal(size=(100, 4), loc=0.0, scale=1.0) labels = ['A','B','C','D'] plt.boxplot(data, labels=labels) plt.show()八种内建默认颜色缩写: b:blue g:green r:red c:cyan m:magenta y:yellow k:black w:white 其他颜色表示方法;’ 灰色阴影 html 十六进制 RGB元组
点和线的样式有23种,查完使用 样式字符串: 可以将颜色,点型、线形写成一个字符串如: cx– mo: kp-
import numpy as np import matplotlib.pyplot as plt # y=np.arange(1,5) plt.plot(y) plt.show() ''' #������ɫ y=np.arange(1,5) plt.plot(y,'y'); plt.plot(y+1,color=(0.1,0.2,0.3)); plt.plot(y+2,'#FF00FF'); plt.plot(y+3,color='0.5') plt.show() ''' ''' #���� y=np.arange(1,5) plt.plot(y,'--'); plt.plot(y+1,'-.'); plt.plot(y+2,':'); plt.show() ''' #����״ ''' y=np.arange(1,5) plt.plot(y,'o'); plt.plot(y+1,'D'); plt.plot(y+2,'^'); plt.plot(y+3,'s'); plt.plot(y+4,'p'); plt.plot(y+5,'x'); plt.show() ''' y=np.arange(1,5) plt.plot(y,'cx--'); plt.plot(y+1,'kp:'); plt.plot(y+2,'mo-.'); plt.show()三种方式简介: pyplot:经典高层封装 pylab:将Matplotlib和Numpy合并的模块,模拟matlab的编程环境 面向对象的方式:Mtaplotlib的精髓,更基础和底层的方式。 pyplot
#pyplot import matplotlib.pyplot as plt import numpy as np x=np.arange(0,10,1) y=np.random.randn(len(x)) plt.plot(x,y) plt.title('pyplot') plt.show()pyplab
#pylab from pylab import * x=arange(0,10,1) y=randn(len(x)) plot(x,y) title('random numbers') show()面向对象
#Object Oriented import matplotlib.pyplot as plt import numpy as np x=np.arange(0,10,1) y=np.random.randn(len(x)) fig=plt.figure()#先生成一个fig对象 ax=fig.add_subplot(111)#生成坐标轴对象 l,=plt.plot(x,y) t=ax.set_title('object oriented') plt.show()fig = plt.figure() Figure实例 可以添加Axes实例
ax = fig.add_subplot(111) 返回Axes实例 参数1:子图总行数 参数2:子图总列数 参数3:子图位置 在Figure上添加Axes的常用方法:
import matplotlib.pyplot as plt import numpy as np x=np.arange(1,100) plt.subplot(221) plt.plot(x,x) plt.subplot(222) plt.plot(x,-x) plt.subplot(223) plt.plot(x,x*x) plt.subplot(224) plt.plot(x,np.log(x)) plt.show()以网格的形式作为整张图的背景
import numpy as np import matplotlib.pyplot as plt y=np.arange(1,5) plt.plot(y,y*2) plt.grid(True) plt.show() #交互中打开关闭网格 plt.grid() import numpy as np import matplotlib.pyplot as plt y=np.arange(1,5) plt.plot(y,y*2) plt.grid(True,color='g',linestyle='-',linewidth='2') plt.show() #Object Oriented import matplotlib.pyplot as plt import numpy as np x=np.arange(0,10,1) y=np.random.randn(len(x)) fig=plt.figure() ax=fig.add_subplot(111) l,=plt.plot(x,y) ax.grid(color='g') plt.show()查看坐标轴范围:
plt.axis()直接调节坐标轴大小:
plt.axis([-5,5,10,20])#X[-5,5] Y[10,20]分别查看两个坐标轴,进行调整: 查看
plt.xlim()调节X轴
plt.xlim([2,12])调整坐标轴刻度: 普通调整
import matplotlib.pyplot as plt import numpy as np x = np.arange(1,11,1) plt.plot(x,x) ax = plt.gca()#获取当前的坐标轴 #调节坐标轴需要一个函数 ax.locator_params(nbins=5)#代表坐标轴有10个格 #只调节一个轴用法: ax.locator_params('x',nbins=5) plt.show()日期作为坐标轴的调整
#用日期做坐标轴的调整 import matplotlib.pyplot as plt import matplotlib as mpl import numpy as np import datetime fig = plt.figure() start = datetime.datetime(2015,1,1) stop = datetime.datetime(2016,1,1) delta = datetime.timedelta(days=1)#日期间隔为一天 dates = mpl.dates.drange(start,stop,delta) y = np.random.rand(len(dates)) ax = plt.gca() ax.plot_date(dates,y,linestyle='-',marker='') date_format = mpl.dates.DateFormatter('%Y-%m-%d')#将日期显示为年-月-天 ax.xaxis.set_major_formatter(date_format)#将上行定义应用 plt.show()***一个图形中画多个图像***双坐标轴 plt方式
import matplotlib.pyplot as plt import numpy as np x = np.arange(2,20,1) y1 = x*x y2 = np.log(x) plt.plot(x,y1) plt.twinx() plt.plot(x,y2,'r') plt.show()面向对象方式
import matplotlib.pyplot as plt import numpy as np x = np.arange(2,20,1) y1 = x*x y2 = np.log(x) fig = plt.figure() ax1 = fig.add_subplot(111) ax1.plot(x,y1) ax1.set_ylabel('Y1') ax2 = ax1.twinx() ax2.plot(x,y2,'r') ax2.set_ylabel('Y1') ax1.set_xlabel('conpare Y1 and Y2') plt.show()