一、简介
Matplotlib 是一个 Python 的 2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。(摘自百度百科)
二、导入
使用前需要导入
import matplotlib.pyplot as plt
三、展示图表
默认情况下不会直接显示图像,需要调用plt.show()函数才能显示图像。
默认在新窗口打开一幅图像,并提供对图像进行操作的按钮。
四、绘制线性图
需要指定x和y,也可只输入y,x默认为0~n-1
plt.plot(x,y)
plt.show()
五、基础设置
1、设置x轴/y轴/标题名称
plt.xlabel('x',fontsize=18)
plt.ylabel('y',fontsize=18)
plt.title('title',fontsize=20)
fontsize:设置字体大小
字体还可以旋转:
plt.xticks(rotation=90) #x轴的字旋转90度
2、设置x轴/y轴的显示范围
plt.axis([xmin,xmax,ymin,ymax])
3、中文字符以及负号的正常展示
默认情况下中文字符和负号会无法正常显示,需要输入以下语句:
plt.rcParams['font.sans-serif']=['SimHei'] #设置字体,使中文字符正常展示
plt.rcParams['axes.unicode_minus']=False #使负号正常展示
4、字符参数
(1)表示颜色的
字符参数 | 颜色 |
---|---|
‘b’ | 蓝色 |
‘g’ | 绿色 |
‘r’ | 红色 |
‘c’ | 青色 |
‘m’ | 品红 |
‘y’ | 黄色 |
‘k’ | 黑色 |
‘w’ | 白色 |
(2)表示类型的:
字符参数 | 类型 |
---|---|
‘-’ | 实线 |
‘–’ | 虚线 |
‘-.’ | 虚点线 |
‘:’ | 点线 |
‘.’ | 点 |
‘,’ | 像素点 |
‘o’ | 圆点 |
‘v’ | 下三角点 |
‘^’ | 上三角点 |
‘<’ | 左三角点 |
‘>’ | 右三角点 |
‘s’ | 正方点 |
‘p’ | 五角点 |
‘*’ | 星形点 |
‘h’ | 六边形点1 |
‘H’ | 六边形点2 |
‘+’ | 加号点 |
‘x’ | 乘号点 |
‘D’ | 实心菱形点 |
‘d’ | 瘦菱形点 |
‘_’ | 横线点 |
‘1’ | 下三叉点 |
‘2’ | 上三叉点 |
‘3’ | 左三叉点 |
‘4’ | 右三叉点 |
例:画红色圆点
plt.plot([1,2,3,4],[1,4,9,16],'ro')
5、线条属性
(1)用字符参数来设置
(2)用关键字来设置
linewidth可改变线条宽度,color可改变线条颜色
例:
plt.plot(x,y,linewidth=4.0,color='r') #将线条宽度设置为4,颜色设置为红色
(3)使用plt.plot()的返回值
plot函数会返回一个live2D对象组成的列表,每个对象代表输入的一对组合
例:
line1=plt.plot(x,y)
line1.set_antialiasoed(False) #关闭抗锯齿
plt.show()
(4)使用plt.setp()
例:
line=plt.plot(x,y)
plt.setp(line,color='g',linewidth=4.0)
6、子图
(1)figure()函数
figure函数会产生一个指定编号为num的图
plt.figure(num,figsize=(10,6)) #编号为num,且设置了图的尺寸
注:figure(1)可省略
(2)subplot()函数
plt.subplot(numrows,numcols,fignum)
其中numrows代表有几行,numcols代表有几列,fignum为图的编号
图的总数sum=numrows*numcols
当sum<10时,中间逗号可省略
例:
import matplotlib.pyplot as plt
plt.figure(figsize=(10,6))
plt.subplot(211) #相当于plt.subplot(2,1,1)
plt.plot([0,1,2,3,4],'r-')
plt.subplot(212)
plt.plot([0,1,2,3,4],[0,3,6,9,12],'b--')
plt.show()
运行后如图:
7、关闭警告
import warnings
warnings.filterwarnings('ignore')
8、坐标系设置
a=plt.gac() #获取坐标系
a.patch.set_facecolor('gray') #设置背景颜色
a.patch.set_alpha(0.3) #设置背景透明度,取值范围为0~1
背景加网格线:
plt.grid()
9、在图上添加数据
plt.text(x,y,n)
其中(x,y)为添加数据的坐标,n为添加的数据
10、添加注释
plt.annotate(text,xy=(x,y),xytest=(x+10,y+10),arrowprops=dict(facecolor='black',edgecolor='red'))
注释:
text:添加的注释内容
xy:被标注的点的坐标
xytest:注释内容的坐标
arrowprops=dict(facecolor=‘black’,edgecolor=‘red’):设置箭头的填充颜色和边缘颜色
11、添加图例
plt.legend()
六、柱状图(bar)
1、基本格式:
plt.bar(x,y)
2、在图上添加数据
plt.text(x,y,n,ha='center',va='bottom')
其中(x,y)为添加数据的坐标,n为添加的数据
ha=‘center’:居中
va=‘bottom’:数字在柱子顶端上方
va=‘top’:数字在柱子顶端下方
七、饼图(pie)
pie (x,explode = None,labels=None,colors=None,autopct=None,petdistance =0.6,shadow=False,labeldistance=1.1,startangle= None,radius=None )
注释:
x :(每一块)的比例,如果 sum ( x )>1会使用 sum ( x )归一化
labels :(每一块)饼图外侧显示的说明文字
explode :(每一块)离开中心距离
startangle :起始绘制角度,默认图是从 x 轴正方向逆时针画起,如设定=90则从 y 轴正方向画起
shadow :是否阴影
labeldistancelabel :绘制位置,相对于半径的比例,如<1则绘制在饼图内侧
autopct 控制饼图内百分比设置,可以使用 format 字符串或者 format function
%1.1f指小数点前后位数(没有用空格补齐)
pctdistance: 类似于 labeldistance ,指定 autopct 的位置刻度
radius: 控制饼图半径
返回值:
如果没有设置 autopct ,返回( patches , texts )
如果设置 autopct ,返回( patches , texts , autotexts )
例:
import matplotlib.pyplot as plt
import pandas as pd
df=pd.read_excel(r'C:\Users\龚熙惠\Desktop\课程中用到的数据\film.xlsx')
plt.figure(figsize=(10,10))
data=pd.cut(df['评分'],[0,3,5,7,9,10]).value_counts()
y=data.values
y=y/sum(y)
plt.title=('电影评分占比')
plt.pie(y,labels=data.index,autopct='%.1f.%%',colors='bygr')
plt.show()
输出结果为
八、频率分布直方图(hist)
plt.hist(arr)
hist 的参数非常多,只有第一个是必须的,后面可选
arr :需要计算直方图的一维数组
bins :直方图的柱数,可选项,默认为10
normed :是否将得到的直方图向量归一化。默认为0
facecolor :直方图颜色
edgecolor :直方图边框颜色
alpha :透明度
histtype :直方图类型,’ bar ‘,’ barstacked ‘,’ step ‘,’ stepfilled ’
返回值:
n :直方图向量,是否归一化由参数 normed 设定
bins :返回各个 bin 的区间范围
patches :返回每个 bin 里面包含的数据,是一个 list
例:
import matplotlib.pyplot as plt
import pandas as pd
df=pd.read_excel(r'C:\Users\龚熙惠\Desktop\课程中用到的数据\film.xlsx')
plt.figure(figsize=(10,10))
plt.hist(df['评分'],bins=20,edgecolor='k')
plt.show()
输出结果为:
九、双轴图
使用twinx():
import matplotlib.pyplot as plt
plt.figure(figsize=(10,10))
a=plt.plot([0,1,2,3,4,5],'b-')
b=plt.twinx()
b.plot([0,1,4,9,16,25],'r--')
plt.show()
输出结果为:
十、散点图(scatter)
plt.scatter(x,y,marker='.')
marker可设置散点的形状
散点形状与字符参数的对应关系见上文
十一、箱形图(boxplot)
1、简介
箱形图( Box - plot )又称为盒须图、盒式图或箱线图,是一种用作显示一组数据分散情况资料的统计图。因形状如箱子而得名。在各种领域也经常被使用,常见于品质管理。它主要用于反映原始数据分布的特征,还可以进行多组数据分布特征的比较。箱线图的绘制方法是:先找出一组数据的中位数、两个四分位数、上下边缘线:然后,连接两个四分位数画出箱子;再将上下边缘线与箱子相连接,中位数在箱子中间。
2、绘制步骤
(1)计算上四分位数(Q3) ,中位数,下四分位数(Q1)
(2)计算上四分位数和下四分位数之间的差值,即四分位数差( IQR , interquartile range )Q3-Q1
(3)绘制箱线图的上下范围,上限为上四分位数,下限为下四分位数。在箱子内部中位数的位置绘制横线
(4)大于上四分位数1.5倍四分位数差的值,或者小于下四分位数1.5倍四分位数差的值,划为异常值( outliers )
(5)异常值之外,最靠近上边缘和下边缘的两个值处,画横线,作为箱线图的触须
(6)极端异常值,即超出四分位数差3倍距离的异常值,用实心点表示;较为温和的异常值,即处于1.5倍﹣3倍四分位数差之间的异常值,用空心点表示
(7)为箱线图添加名称,数轴等
3、形式
pit . boxplot ( x , notch = None , sm = None , vert = None . whis = None , positions = None , widths = None , patch _ artist = None , meanline = None , showmeans = None . showcaps = None , showbox = None , showfliers = None , boxprops = None , labels = None , flierprops = None . medianprops = None , meanprops = None , capprops = None , whiskerprops = None )
x :指定要绘制箱线图的数据;
notch :是否是凹口的形式展现箱线图,默认非凹口;
sym :指定异常点的形状,默认为+号显示;
vert :是否需要将箱线图垂直摆放,默认垂直摆放:
whis :指定上下须与上下四分位的距离,默认为1.5倍的四分位差;
positions :指定箱线图的位置,默认为[0.1.2…];
widths :指定箱线图的宽度,默认为0.5;
patch _ artist :是否填充箱体的颜色;
meanline :是否用线的形式表示均值,默认用点来表示;
meanprops :设置均值的属性,如点的大小、颜色等;
capprops :设置箱线图顶端和末端线条的属性,如颜色、粗细等; whiskerprops :设置须的属性,如颜色、粗细、线的类型等
支持多组数据导入
十二、相关系数矩阵图
pandas本身也封装了画图函数
1、scatter_martrix()
可以画出各个属性之间的散点图,对角线是分布图
%pylab inline #使图像展示出来
result=pd.scatter_matrix(data,diagonal='hist',color='k',alpha=0.3,figsize=(10,10))
diagonal=‘hist’:对角线的分布图为柱状图
diagonal=‘kde’:对角线分布图为曲线图
2、seaborn
seaborn是一个精简的python库,可以创建具有统计意义的图表,能理解Pandas的DataFrame类型
seaborn . heatmap ( data , vmin = None , vmax = None . cmap = None , center = None , robust = False , annot = None , fmt ='2g', annot _ kws = None . linewidths =0. linecolor =' white ', cbar = True , cbar _ kws = None , cbar _ ax = None , square = False , xticklabels =' auto ', yticklabels =' auto ', mask = None , ax = None ," kwargs )
(1)热力图输入数据参数:
data :矩阵数据集,可以是 numpy 的数组( array ),也可以是 pandas 的 DataFrame 。如果是 DataFrame ,则 df 的 index / column 信息会分别对应到 heatmap 的 columns 和 rows ,即 pt . index 是热力图的行标, pt . columns 是热力图的列标
(2)热力图矩阵块颜色参数:
vmax , vmin :分别是热力图的颜色取值最大和最小范围,默认是根据 data 数据表里的取值确定
cmap :从数字到色彩空间的映射,取值是 matplotlib 包里的 colormap 名称或颜色对象,或者表示颜色的列表;改参数默认值:根据 center 参数设定
center :数据表取值有差异时,设置热力图的色彩中心对齐值;通过设置 center 值,可以调整生成的图像颜色的整体深浅:设置 center 数据时,如果有数据溢出,则手动设置的 vmax 、 vmin 会自动改变
robust :默认取值 False :如果是 Faise ,且没设定 vmin 和 vmax 的值.
(3)热力图矩阵块注释参数:
annot ( annotate 的缩写):默认取值 False ;如果是 True ,在热力图每个方格写入数据;如果是矩阵,在热力图每个方格写入该矩阵对应位置数据
fmt :字符串格式代码,矩阵上标识数字的数据格式,比如保留小数点后几位数字
annot _ kws :默认取值 False :如果是 True ,设置热力图矩阵上数字的大小颜色字体, matplotlib 包 ltext 类下的字体设置:
(4)热力图矩阵块之间间隔及间隔线参数:
linewidths :定义热力图里表示两两特征关系的矩阵小块"之间的间隔大小
linecolor :切分热力图上每个矩阵小块的线的颜色,默认值是’ white ’
(5)热力图颜色刻度条参数:
cbar :是否在热力图侧边绘制颜色刻度条,默认值是 True
cbar _ kws :热力图侧边绘制颜色刻度条时,相关字体设置,默认值是 None
cbar _ ax :热力图侧边绘制颜色度条时,刻度条位置设置,默认值是 None
xticklabels, yticklabels: xticklabels控制每列标签名的输出;yticklabels控制每行标签名的输出。默认值是auto。如果是True,则以DataFrame的列名作为标签名。如果是False,则不添加行标签名。如果是列表,则标签名改为列表中给的内容。如果是整数K,则在图上每隔K个标签进行一次标注。