文章目录
一、matplotlib的介绍
- 1.Matplotlib 是一个支持Python的2D的绘图库,可以绘制各种形式的图表
- 2.Matplotlib可以绘制的图表有:线图、散布图、条状图、箱图、图片已经动画(但是对于动画师不专业,对于3D图不专业的)
- 3.良好的操作系统兼容性
- 4.绘制印刷级别的高质量图表
- 5.可以在Python的脚本、Python Shell、IPython Shell、Jupyter Notebook、Web(返回js、css、html)
- 6.核心对象:尺寸对象,plt在绘制图片的时候自动创建一个Figure对象。
二、图表的构成
- 1.图表的标题
- 2.图例部分
- 3.XY轴标签部分
- 4.XY轴的刻度部分
- 5.图形部分
- 6.图形的标签
import numpy as np
#scikit-python
import scipy.stats as stats
import matplotlib.pyplot as plt
import matplotlib.style as style#风格
#防止图形显示不出来,进行强制显示
%matplotlib inline
#设置图表清晰度和字体
style.use('fivethirtyeight')#风格
plt.rcParams["figure.figsize"] = (14,7)#参数:尺寸
plt.figure(dpi=80)#清晰度
#图形部分
X = np.linspace(-4,4,100)#-4到4,一百个
y = stats.norm.pdf(X) / np.max(stats.norm.pdf(X))#stats.norm.pdf(X)是高斯分布
#绘制一条线
#PDF
plt.plot(X,y)
#把线的下方进行填充
plt.fill_between(X,y,alpha=.3)#alpha是模糊程度,透明程度
#CDF分布函数
plt.plot(X,stats.norm.cdf(X))#这个就不要填充了,他不是密度函数,是分布函数cdf
#图形注释
#x代表x轴的坐标
#y代表y轴的坐标
#s师注释的字符串
#rotation是旋转的角度
#alpha是透明度
#weight加粗
#color字体的颜色
plt.text(x=-1.3,y=.7,s='pdf',rotation=65,alpha=.75,weight='bold',color='#0000FF')#xy是注释的位置,weight='bold'加粗
plt.text(x=-.35,y=.5,s='cdf',rotation=55,alpha=.75,weight='bold',color='#fc4f30')#xy是注释的位置,weight='bold'加粗
#设置图例,要按顺序去写,先画的pdf
plt.legend(['PDF','CDF'])
#标题
plt.title("Demo")
#X,Y轴的标签
plt.xlabel('X',color='red')
plt.ylabel('Y',color='red',rotation=0)#rotation是旋转的角度
#设置刻度
plt.axis([-5,5,0,1.2])# [xmin xmax ymin ymax]
#保存图片
plt.savefig('./imgs/pdf.png',dpi=200)
#用图片可以写数据分析的报告 word
三、线性图形的绘制
1.绘制的基本过程
- 首先,线性图形是一个函数的关系 f ( x ) = e − z 2 f(x)=e^{-z^2} f(x)=e−z2
- 然后,这个函数之间的关系是向量之间的关系
import numpy as np
#scikit-python
import scipy.stats as stats
import matplotlib.pyplot as plt
import matplotlib.style as style
#防止图形显示不出来,进行强制显示
%matplotlib inline
#设置背景风格
style.use('fivethirtyeight')
#设置图片画布的尺寸
plt.rcParams["figure.figsize"] = (14,7)
#【重要】设置支持中文,windows可以设置字***置,但是linux'不行,所以我们要记住这个方法
plt.rcParams['font.family'] = ['SimHei']
#设置清晰度
plt.figure(dpi=100)
#设置X轴的向量
X = np.arange(-np.pi,np.pi,.1)#等差数列,数轴范围(-np.pi,np.pi),间隔0.1
#设置y于x轴的关系函数式
#exp 以e为底数的指数型函数
y = np.exp(-X**2.2)
#绘制图形
plt.plot(X,y)
#添加标题
plt.title('示例')
#保存图片
plt.savefig('./imgs/line.png',dpi=100)
2.使用交互式显示方式
- 将
%matplotlib inline
修改为%matplotlib notebook
就转变为动态图片了 - 交互形式是动态的,点击关闭按钮的化还是会变成静态的。
%pylab
%matplotlib qt5
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.style as style
import warnings
#忽略警告提示信息
warnings.filterwarnings('ignore')
#设置图片嵌入在jupyter中,在其它的编译工具中不起作用
%matplotlib notebook
#设置背景风格
style.use('fivethirtyeight')
#设置图片尺寸
plt.rcParams["figure.figsize"] = (8,4)
#设置当前图片支持中文的黑体,目前在windows操作系统下有作用
plt.rcParams['font.family'] = ['SimHei']
#设置清晰度
plt.figure(dpi=100)
#设置X轴的向量
X = np.arange(-np.pi,np.pi,0.1)
#y轴和X轴的关系(例如当X=1的时候y=2,当X=2的时候y=4,y=2X)
y = np.exp(-X**2.2)
#设置中文标题
plt.title('动态绘制线型图')
#绘制图形
plt.plot(X,y)
#保存图形
plt.savefig('./imgs/line2.png',dpi=100)
3.设置LateX符号
- LateX是算法之父高德纳编写的一款学术型文档编译工具
- 他支持各种希腊字母和其它数学符号的编写
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.style as style
import warnings
#忽略警告提示信息
warnings.filterwarnings('ignore')
#设置图片嵌入在jupyter中,在其它的编译工具中不起作用
%matplotlib inline
#设置背景风格
style.use('fivethirtyeight')
#设置图片尺寸
plt.rcParams["figure.figsize"] = (8,4)
#设置当前图片支持中文的黑体,目前在windows操作系统下有作用
plt.rcParams['font.family'] = ['SimHei']
#当设置中文以后,负号的显示也会出现问题,我们需要对符号进行控制【重要】
plt.rcParams['axes.unicode_minus'] = False
#设置清晰度
plt.figure(dpi=100)
X = np.arange(-np.pi,np.pi,0.1)
y1 = np.sin(X)
y2 = np.cos(X)
plt.title('绘制线条')
plt.plot(X,y1)
plt.plot(X,y2)
#将LateX映射到数轴当中【重要】
pi = np.pi
#替换轴
#1.确定好你需要的新的刻度的数值
ticks = [-pi,-pi/2,0,pi/2,pi]
#2.确定好你需要确定新符号【LateX符号】
labels = ['$-\pi$','$-\pi/2$','$zero$','$\pi/2$','$\pi$']
#替换x轴
plt.xticks(ticks,labels,color='orange',rotation=30)
#替换轴
plt.yticks([-1,0,1],['Max','Zero','Min'],color='orange',rotation=30)
#保存
plt.savefig('./imgs/double.png',dpi=100)
4.点、线样式设置
- 控制线的形状
- 控制点的形状
- 控制颜色和透明度
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.style as style
import warnings
#忽略警告提示信息
warnings.filterwarnings('ignore')
#设置图片嵌入在jupyter中,在其它的编译工具中不起作用
%matplotlib inline
#设置背景风格
style.use('fivethirtyeight')
#设置图片尺寸
plt.rcParams["figure.figsize"] = (8,4)
#设置当前图片支持中文的黑体,目前在windows操作系统下有作用
plt.rcParams['font.family'] = ['SimHei']
#当设置中文以后,负号的显示也会出现问题,我们需要对符号进行控制
plt.rcParams['axes.unicode_minus'] = False
#设置清晰度
plt.figure(dpi=100)
X = np.arange(-np.pi,np.pi,0.1)
y = np.exp(-X**2)
#linestyle ls 线的样式 【-实线】【-- 虚线】 【:点状虚线】 【step阶梯线】 【-.感叹号线】
#linewidth lw 线的宽度
#marker参数控制点的显示问题 【s正方形】 【d 菱形】 【o 圆形】 【x 叉】
#markersize 控制点大小的
plt.plot(X,y,ls='-.',lw=5,marker='x',markersize=15,c='g')#c='g'是颜色
plt.savefig('./imgs/line_marker.png',dpi=100)
四、绘制其它图形
1.柱状图的绘制
柱状图 ,又叫做长条图、棒状图、条状图,是一种以长方形的长度为变量的统计图形。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.style as style
import warnings
#忽略警告提示信息
warnings.filterwarnings('ignore')
#设置图片嵌入在jupyter中,在其它的编译工具中不起作用
%matplotlib inline
#设置背景风格
style.use('fivethirtyeight')
#设置图片尺寸
plt.rcParams["figure.figsize"] = (8,4)
#设置当前图片支持中文的黑体,目前在windows操作系统下有作用
plt.rcParams['font.family'] = ['SimHei']
#当设置中文以后,负号的显示也会出现问题,我们需要对符号进行控制
plt.rcParams['axes.unicode_minus'] = False
#设置清晰度
plt.figure(dpi=100)
X1 = [1,3,5,7,9]
y1 = [3,7,1,2,4]
X2 = [2,4,6,8,10]
y2 = [2,1,3,6,7]
plt.barh(X1,y1,label='one')
plt.barh(X2,y2,label='two')
#添加图例
#图例调节位置 loc=[]
#图例的列数控制 cols
plt.legend(loc=[0,1],ncol=2)
plt.title('柱状图')
plt.xticks(range(0,10))
plt.savefig('./imgs/bar.png',dpi=100)
2.饼图
常用于统计学模块,是一个标准的2D图形,用手绘制,需要时用圆规。
饼图所表示的统计值时比例。
plt.pie()参数如下:
- X参数代表的时各个扇形面的数据集
- labels是每一个扇面的标签
- shadow设置阴影
- colors是每个扇面的颜色
- explode设置各个扇面的脱离效果
- autopct 设置扇面显示的百分比效果
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.style as style
import warnings
import seaborn as sns
#忽略警告提示信息
warnings.filterwarnings('ignore')
#设置图片嵌入在jupyter中,在其它的编译工具中不起作用
%matplotlib inline
#设置背景风格
style.use('fivethirtyeight')
#设置图片尺寸
plt.rcParams["figure.figsize"] = (8,8)
#设置当前图片支持中文的黑体,目前在windows操作系统下有作用
plt.rcParams['font.family'] = ['SimHei']
#当设置中文以后,负号的显示也会出现问题,我们需要对符号进行控制
plt.rcParams['axes.unicode_minus'] = False
#设置清晰度
plt.figure(dpi=100)
X = [24314.43, 47535.45, 35680.25, 57425.87, 62457.97, 24578.56, 65617.84, 43634.54, 49596.93,23568.31]
labels = ['广东','江苏','山东','浙江','河南','四川','湖北','湖南','河北','福建']
#找到GDP最高的省份
explode = np.zeros(shape=len(X))
max_index = np.argmax(X)
#将GDP最高的省脱离出去【重要】,explode=explode,把最高的那个剔除出来了,explode[max_index] = .1这个写1的话太远了
explode[max_index] = .1
a=plt.pie(X,labels=labels,autopct='%.2f%%',explode=explode,colors=sns.color_palette(palette='autumn',n_colors=len(X)))
#控制x和y轴的长度相同
plt.axis('equal')
#保存
plt.savefig('./imgs/pie.png',dpi=100)
3.散布图
散布图又叫做相关图,它是指用来研究两个变量之间是否存在相关关系的一种图形。
在质量检测的原因分析中。这些变量的关系往往不能进行解析描述。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.style as style
import warnings
#忽略警告提示信息
warnings.filterwarnings('ignore')
#设置图片嵌入在jupyter中,在其它的编译工具中不起作用
%matplotlib inline
#设置背景风格
style.use('fivethirtyeight')
#设置图片尺寸
plt.rcParams["figure.figsize"] = (6,4)
#设置当前图片支持中文的黑体,目前在windows操作系统下有作用
plt.rcParams['font.family'] = ['SimHei']
#当设置中文以后,负号的显示也会出现问题,我们需要对符号进行控制
plt.rcParams['axes.unicode_minus'] = False
#设置清晰度
plt.figure(dpi=100)
X = np.arange(20)
y = X**3
plt.scatter(X,y)
plt.savefig('./imgs/sca.png',dpi=100)
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.style as style
import warnings
#忽略警告提示信息
warnings.filterwarnings('ignore')
#设置图片嵌入在jupyter中,在其它的编译工具中不起作用
%matplotlib inline
#设置背景风格
style.use('fivethirtyeight')
#设置图片尺寸
plt.rcParams["figure.figsize"] = (6,4)
#设置当前图片支持中文的黑体,目前在windows操作系统下有作用
plt.rcParams['font.family'] = ['SimHei']
#当设置中文以后,负号的显示也会出现问题,我们需要对符号进行控制
plt.rcParams['axes.unicode_minus'] = False
#设置清晰度
plt.figure(dpi=100)
X = np.random.randint(10,100,1000)
y = np.random.randint(10,100,1000)
for i in range(1000):#每次都不同,用for循环产生
c = np.random.random(3)#颜色随机
s = np.random.randint(5,100)#点的大小随机
plt.scatter(X[i],y[i],marker='d',color=c,s=s)#marker='d'是菱形
#plt.scatter(X,y)
#控制刻度轴的范围
plt.axis([0,115,0,115])
五、绘制子图表
有时候我们需要的是多张图像,而不是所有的图表在一张图像中,但是plt对象每次只能产生一个画布。
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.style as style
import warnings
#忽略警告提示信息
warnings.filterwarnings('ignore')
#设置图片嵌入在jupyter中,在其它的编译工具中不起作用
%matplotlib inline
#设置背景风格
style.use('fivethirtyeight')
#设置图片尺寸
plt.rcParams["figure.figsize"] = (2*8,2*6)
#设置当前图片支持中文的黑体,目前在windows操作系统下有作用
plt.rcParams['font.family'] = ['SimHei']
#当设置中文以后,负号的显示也会出现问题,我们需要对符号进行控制
plt.rcParams['axes.unicode_minus'] = False
plt.figure(dpi=100)
X = np.linspace(-10,10,100)
y1 = X**3
y2 = X
y3 = np.sqrt(X)
y4 = np.cos(X)
#子图表生成几个,默认是一个【重要】
fig,ax = plt.subplots(nrows=2, ncols=2)#两行两列的表
#第一张图
#plt.title() 类对象
#ax[0,0]示例对象.set_title() 在plt中只要是示例对象,所有的方法都要带 set_前缀
ax[0,0].set_title('幂次关系1')
ax[0,0].scatter(X,y1,alpha=.5)#alpha=.5透明度
#第二张
ax[0,1].set_title('全相关')
ax[0,1].scatter(X,y2,alpha=.5,color='r')
#第三张
ax[1,0].set_title('幂次关系2')
ax[1,0].scatter(X,y3,alpha=.5,color='orange')
#第三张
ax[1,1].set_title('周期性')
ax[1,1].scatter(X,y4,alpha=.5,color='purple')
#保存
plt.savefig('./imgs/subplots.png',dpi=200)