4.Matplotlib数据展示

4.1 matplotlib基础

Python的一个2D图形包,pyplot封装很很多画图函数。

1
2
import matplotlib.pyplot as plt
import numpy as np

matplotlib.pyplot包含一系列类似类似MATLAB中绘图函数的相关函数。

plt.show()函数

默认情况下,matplotlib.pyplot不会直接显示图像,只有调用plt.show()函数时,图像才会显示出来。

plt.show()默认时在新窗口打开一幅图像,并且童工了对图像进行操作的按钮。

不过在ipython命令行中,我们可以将它插入notebook中,并且不需要调用plt.show()也可以显示:
\
%matplotlib notebook

%matplotlib inline
\
不过在实际写程序中,我们还是习惯调用plt.show()函数将图像显示出来。

1
%matplotlib inline

plt.plot()函数相关

例子

plt.plot()函数可以用来绘制线型图

1
plt.plot([1,2,3,4])   ##默认使用索引作为x,此处参数指定的是y
[<matplotlib.lines.Line2D at 0x25575f864f0>]
1
2
3
plt.plot([1,2,3,4])
plt.ylabel('y')
plt.xlabel('x')
Text(0.5, 0, 'x')
基本用法

plot函数基本的用法:

1.指定x和y:plt.plot(x,y)

2.默认参数,x为~N-1:plt.plot(y)

因此,在上面的例子中,默认使用了0,1,2,3作为x值

1
2
plt.plot([1,2,3,4],[1,4,9,16])
plt.show()
字符参数

常用标识颜色的字符参数:\
‘b’:蓝色blue\
‘g’:绿色green\
‘r’:红色red\
‘c’:青色cyan\
‘m’:品红magenta\
‘y’:黄色yellow\
‘k’:黑色black\
‘w’:白色white

常用表示类型的字符参数:\
‘-‘:实线\
‘- -‘:虚线\
‘-.’:虚点线\
‘:’点线\
‘.’:点\
‘,’:像素点\
‘o’:圆点\
‘v’:下三角点\
‘`’:上三角点\
‘<’:左三角点\
‘>’:右三角点\
‘1’:下三叉点\
‘2’:上三叉点\
‘3’:左三叉点\
‘4’:右三叉点\
‘s’:正方点\
‘p’:五角点\
‘*’:星型点\
‘h’:六边形点1\
‘H’:六边形点2\
‘+’:加号点\
‘x’:乘号点\
‘D’:实心菱形点\
‘d’:瘦菱形点\
‘_’:横线点\

1
2
plt.plot([1,2,3,4],[1,4,9,16],'g--')
plt.show()



显示范围

可以使用axis函数指定坐标轴显示的范围

1
2
3
plt.plot([1,2,3,4],[1,4,9,16],'g--')
plt.axis([0,5,0,20])
plt.show()
传入numpy数组

如果传入的是列表,matplotlib会在内部将它转化成数组再进行处理

在一个图里画多条线

1
2
t=np.arange(0.,5.,0.2)
t
array([0. , 0.2, 0.4, 0.6, 0.8, 1. , 1.2, 1.4, 1.6, 1.8, 2. , 2.2, 2.4,
       2.6, 2.8, 3. , 3.2, 3.4, 3.6, 3.8, 4. , 4.2, 4.4, 4.6, 4.8])
1
2
3
4
plt.plot(t,t,'r--',
t,t**2,'b-.',
t,t**3,'g-')
plt.show()
传入多组数据

画多条线是传入了多组(x,y,format_str),我们可以把这些组合放到一个plot函数中去即可。\
plt.plot(x1,y1,’format1’,x2,y2,’format2’,……)

线条属性

可以通过linewidth设置线条粗度,通过color设置线条颜色

1
2
3
4
x=np.linspace(-np.pi,np.pi)
y=np.sin(x)
plt.plot(x,y,linewidth=5,color='r')
plt.show
<function matplotlib.pyplot.show(close=None, block=None)>
利用plt.plot的返回值来这是线条属性

plot函数返回一个line2D对象组成的列表,每个对象代表输入的一对组合,例如:\
line1,line2为两个Line2D对象\
line1,line2 = plt.plot(x1,y1,x2,y2)\
返回3个Line2D对象组成的列表\
lines=plt.plot(x1,y1,x2,y2,x3,y3)\
我们可以使用这个返回值来对线条属性进行设置。

1
2
3
4
5
6
x=np.linspace(-np.pi,np.pi)
y=np.sin(x)
line1,line2=plt.plot(x,y,'r-',x,y+1,'g-')
## 对plot返回的一个对象进行属性修改
line1.set_antialiased(False) ## 抗锯齿功能关闭
plt.show()



1
2
3
4
lines=plt.plot(x,y,'r-',x,y+1,'g-')
## 对plot返回列表进行属性修改
lines.set_antialiased(False) ## 抗锯齿功能关闭
plt.show()
---------------------------------------------------------------------------

AttributeError                            Traceback (most recent call last)

<ipython-input-36-96b1221f6d86> in <module>
      1 lines=plt.plot(x,y,'r-',x,y+1,'g-')
      2 ## 对plot返回列表进行属性修改
----> 3 lines.set_antialiased(False)   ## 抗锯齿功能关闭
      4 plt.show()


AttributeError: 'list' object has no attribute 'set_antialiased'

无法直接对返回的列表属性进行修改

利用plt.setp()修改线条性质
1
2
3
4
5
x=np.linspace(-np.pi,np.pi)
y=np.sin(x)
line=plt.plot(x,y)
plt.setp(line,color='r',linewidth=5)
plt.show()



1
2
## Matlab的设置方式
plt.setp(line,'color','r','linewidth',5)
[None, None]

子图

figure()函数会产生一个指定编号为num的图:plt.figure(num)\
这里,figure(1)其实是可以省略的,因为默认情况下,plt会自动产生一幅图像。
\
使用subplot()可以在一幅图中生成多个子图,其参数为:plt.subplot(numrows,numcols,fignum)\
当numrows * numcols < 10时,中间的逗号可以省略,因此plt.subplot(211)就相当于plt.subplot(2,1,1)

1
2
3
4
5
6
7
8
9
10
11
12
def f(t):
return np.exp(-t)*np.cos(2*np.pi*t)
t1=np.arange(0.,5.,0.1)
t2=np.arange(0.,5.,0.02)

plt.figure(figsize=(10,6))
plt.subplot(211)
plt.plot(t1,f(t1),'bo',t2,f(t2),'k')

plt.subplot(212)
plt.plot(t2,np.cos(2*np.pi*t2),'r--')
plt.show()

4.2 电影数据绘图

库导入及数据导入

关闭警告消息

1
2
import warnings
warnings.filterwarnings('ignore')
1
2
3
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

自定义图形属性

1
2
plt.rcParams['font.sans-serif']=['SimHei']  ##设置字体为 黑体
plt.rcParams['axes.unicode_minus']=False ##显示符号
1
2
df=pd.read_excel('movies_data3.xlsx') ##导入电影数据
df.head()
Unnamed: 0 年代 产地 Unnamed: 0.1 名字 投票人数 类型 上映时间 时长 评分 首映地点 评分等级 热门程度
0 0 1994 美国 0 肖申克的救赎 692795 剧情/犯罪 1994-09-10 00:00:00 142 9.6 多伦多电影节 A A
1 1 1957 美国 1 控方证人 42995 剧情/悬疑/犯罪 1957-12-17 00:00:00 116 9.5 美国 A A
2 2 1997 意大利 2 美丽人生 327855 剧情/喜剧/爱情 1997-12-20 00:00:00 116 9.5 意大利 A A
3 3 1994 美国 3 阿甘正传 580897 剧情/爱情 1994-06-23 00:00:00 142 9.4 洛杉矶首映 A A
4 4 1993 中国大陆 4 霸王别姬 478523 剧情/爱情/同性 1993-01-01 00:00:00 171 9.4 香港 A A

柱状图 plt.bar()

柱状图 bar chart,是一种以长方形的长度为变量的表达图形统计报告图,由一系列高度不等的纵向条纹表示数据分布的情况,用来比较两个或以上的价值(不同时间或者不同条件),只有一个变量,通常利用于较小的数据集分析。柱状图可横向排列,或用多维方式表达。

绘制每个国家或地区的电影数量的柱状图

1
2
data=df['产地'].value_counts()
data
美国      11979
日本       5051
中国大陆     3802
中国香港     2851
法国       2816
英国       2762
其他       1920
俄罗斯      1509
韩国       1351
意大利       749
加拿大       723
中国台湾      618
西班牙       447
印度        357
澳大利亚      300
泰国        294
丹麦        198
瑞典        192
波兰        181
荷兰        155
比利时       139
墨西哥       119
阿根廷       116
巴西        101
Name: 产地, dtype: int64
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
x=data.index
y=data.values

## 定义图片大小
plt.figure(figsize=(15,6))
## 定义图片标题
plt.title('各国家或地区电影数量',fontsize=20)
## 设置横纵轴的名称
plt.xlabel('国家或地区',fontsize=18)
plt.ylabel('电影数量',fontsize=18)
##调整轴上属性
plt.tick_params(labelsize=14) ##字体设置14号
plt.xticks(rotation=90) ##X轴的字体进行90度旋转
## 添加网格线
plt.grid()

## 在每个柱形上标注文本
for a,b in zip(x,y):
plt.text(a,b+10,b,ha='center',va='bottom',fontsize=15,color='r')
##text(横坐标,纵坐标,标注文本,对齐方式,标注位置(在柱形的方位),字体大小,)

## 柱状图绘制
plt.bar(x,y,color='g')
plt.show()



曲线图 plt.plot()

曲线图利用曲线的升降变化来标识被研究现象发展变化趋势的一种图形。它在分析研究社会经济现象的发展变化,依存关系等方面具有重要作用。

绘制曲线图使,如果是某一现象的时间指标,应将时间绘在坐标的横轴上,指标绘在纵轴上。如果是两个现象依存关系的显示。可以将标识原因的指标绘在横轴上,表示结果的指标绘在纵轴上。同时还应该注意整个图形的长宽比例。

绘制每年上映的电影数量的曲线图 1838-2015年

1
2
3
4
data=df['年代'].value_counts()
data=data.sort_index()
data=data[:-2] ## 按年份排序,把2016年和2017年剔掉
data
1888       2
1890       1
1892       1
1894       3
1895       8
        ... 
2011    1866
2012    2042
2013    2001
2014    1887
2015    1592
Name: 年代, Length: 125, dtype: int64
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
x=data.index
y=data.values

plt.figure(figsize=[15,6])
plt.plot(x,y,color='b')
plt.title('每年上映的电影数量',fontsize=20)
plt.xlabel('年份',fontsize=18)
plt.ylabel('电影数量',fontsize=18)
plt.tick_params(labelsize=14)

## 设置x的间距/步长为10的文本显示
for a,b in zip(x[::10],y[::10]):
plt.text(a,b+10,b,ha='center',va='bottom',fontsize=15)

## 标记特殊点 ## (箭头文本,特殊点位置(箭头位置),文本位置(箭尾位置),箭头属性(填充颜色,边框颜色))
plt.annotate('2012年达到最大值',xy=(2012,data[2012]),xytext=(2025,2100),arrowprops=dict(facecolor='black',edgecolor='red'))
## 设置文本
plt.text(1980,1000,'电影数量开始快速增长')

plt.show()



饼图 plt.pie()

饼图 Sector Graph。仅排列在工作表的一列或一行中,的数据可以绘制到饼图中。饼图显示一个数据系列(数据系列:在图标中绘制的相关数据点,这些数据原子数据表的行或列。图表中的每个数据系列具有唯一的颜色或图案,并且在图表的图像中表示。可以在图表中绘制一个或多个数据系列。饼图只有一个数据系列。)中各项的大小与各项综合的比例。饼图中的数据点(数据点:在图表中绘制的单个值。这些值由条形、柱形、折线、饼图或圆环的扇面、远点和其他被称为数据标记的图形表示。相同颜色的数据标记组成一个数据系列。)显示为整个饼图的百分比。

函数原型:\
pie(x, explode=None, labels=None, colors=None, autopct=None, pctdistance=0.6, shadow=False, labeldistance=1.1, startangel=None, radius=None)

参数:\
x:(每一块)的比例,如果sum(x) > 1 会使用sum(x) 归一化\
labels:(每一块)饼图外侧显示的说明文字\
explode:(每一块)离开中心距离\
startangle:其实绘制角度,默认图是从x轴正方向逆时针画起。如设定=90则从y轴正方向画起\
shadow:是否阴影\
labeldistance:label绘制位置。相对于半径的比例。如<1则绘制在饼图内侧\ autopct:控制饼图内百分比设置,可以使用format字符串或者format function('%1.1f'指小数点前后位数(没有用空格补齐))\ pctdistance:类似于labeldistance。指定autopct的位置刻度\ radius:控制饼图半径

返回值:\
如果没有设置autopct,返回(patches, texts)\
如果设置autopct,返回(patches, texts, autotexts)

根据电影的时长绘制饼图

1
2
data=pd.cut(df['时长'],[0,60,90,110,1000]).value_counts()
data
(90, 110]      13232
(0, 60]        10321
(60, 90]        7727
(110, 1000]     7450
Name: 时长, dtype: int64
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
y=data.values
## 可有可无,不写的话,系统自动进行归一化
y=y/sum(y)

plt.figure(figsize=(7,7))
plt.title('电影时长占比',fontsize=20)

patches,l_text,p_text = plt.pie(y,labels=data.index,autopct='%.1f %%',colors='bygr',startangle=90)
## 设置返回值——饼图内部字体
for i in p_text:
i.set_size(15)
i.set_color('w')
## 设置返回值——外部字体
for i in l_text:
i.set_size(15)
i.set_color('r')

## 图例
plt.legend()

plt.show()



直方图 plt.hist()

直方图 Histogram又称质量分布直方图,是一种统计报告图。由一系列高度不等的纵向条纹或线段表示数据分布情况。一般用横轴表示数据类型,纵轴表示分布情况。\
直方图是数值数据分布的精确图形表示。这是一个连续变量(定量变量)的概率分布的估计,是一种条形图。为了构建直方图,第一步是将值的范围分段,即将整个值得范围分成一系列间隔,然后计算每个间隔中有多少值(这些值通产被指定为连续的,不重叠的变量间隔。)将必须相邻,并且通常是(但不是必须)相等的大小。\
直方图也可以被归一化,以显示“相对”概率。然后,它显示了属于几个类别中的每个案例的比例,其高度等于1.

plt.hist()\
参数:

arr:需要计算直方图的一维数组\
bins:直方图的柱数,可选项,默认为10\
normed:是否将得到的直方图向量归一化。默认为0\
facecolor:直方图的颜色\
edgecolor:直方图边框的颜色\
alpha:透明度\
histtype:直方图类型(‘bar’,‘barstacked’,‘step’,‘stepfilled’)
\
返回值

n:直方图向量,是否归一化由参数normed设置\
bins:返回各个bin的区间范围\
patches:返回每个bin里面包含的数据,是一个list

根据电影的评分绘制频率分布直方图

1
2
3
plt.figure(figsize=(10,6))
plt.hist(df['评分'],bins=20,edgecolor='k',alpha=0.5)
plt.show()



双轴图 norm.pdf(bins,mu,sigma)

根据电影的评分绘制频率分布双轴图(公用一个x轴的直方图和曲线图)

1
2
import matplotlib.mlab as mlab
from scipy.stats import norm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
fig=plt.figure(figsize=(10,8))
ax1=fig.add_subplot(111)
n,bins,patches=ax1.hist(df['评分'],bins=100,color='m')

ax1.set_ylabel('电影数量',fontsize=15)
ax1.set_xlabel('评分',fontsize=15)
ax1.set_title('频率分布图',fontsize=20)

y=norm.pdf(bins,df['评分'].mean(),df['评分'].std()) ##在直方图的基础上再建一个轴
ax2=ax1.twinx() ## 和直方图使用同一个x轴
ax2.plot(bins,y,'g-')
ax1.set_ylabel('频类分布',fontsize=15)

plt.show()

散点图 plt.scatter()

用两组数据构成多个坐标点,考察坐标点的分布,判断两变量之间是否存在某种关联或总结坐标点的分布模式。散点图将序列显示为一组点。值由点在图表中的位置表示。类别由图表中的不同标记表示。散点图通常用于比较跨类别的聚合数据。

根据电影时长和电影评分绘制散点图

1
2
3
4
5
6
7
8
9
10
x=df['时长']
y=df['评分']

plt.figure(figsize=(10,8))
plt.scatter(x,y)
plt.title('电影时长与评分散点图',fontsize=20)
plt.xlabel('时长',fontsize=18)
plt.ylabel('评分',fontsize=18)

plt.show()

由于数据量过大,所以画的图非常冗杂

1
2
3
4
5
6
7
8
9
10
x=df['时长'][::100]
y=df['评分'][::100]

plt.figure(figsize=(10,6))
plt.scatter(x,y,marker='*')
plt.title('电影时长与评分散点图',fontsize=20)
plt.xlabel('时长',fontsize=18)
plt.ylabel('评分',fontsize=18)

plt.show()



可以发现,大部分的电影时长还是集中在50-100附近,评分大多在7分左右

marker属性

设置散点的形状:

‘.’:point点\
‘,’:pixel像素\
‘o’:circle圈\
‘v’:倒三角形\
‘^’:正三角形\
‘<’:左三角形\
‘>’:右三角形\
‘1’:tri_down\
‘2’:tri_up\
‘3’:tri_left\
‘4’:tri_right\
‘8’:八角形\
‘s’:正方形\
‘p’:五角\
‘*’:星形\
‘h’:六角1\
‘H’:六角2\
‘+’:加号\
‘x’:x号\
‘D’:钻石\
‘d’:细钻\
‘|’:v线\
‘_’:H线

箱型图 plt.boxplot()

箱型图(box-plot)又称为盒装图,盒式图或箱线图,是一种用作显示一组数据分散情况资料的统计图。因形状如箱子而得名。在各种领域也经常被使用,常见于品质管理。它主要用于反映原始数据分布特征,还可以进行多组数据分布特征的比较。
箱线图的绘制方法是:先找出一组数据的中位数,两个四分位数,上下边缘线;然后,连接两个四分位数画出箱子;再将上下边缘线与箱子相连接,中位数在箱子中间。

一般设计过程

(1)计算上四分位数(Q3),中位数,下四分位数(Q1)

(2)计算上四分位数和下四分位数之间的差值,即四分位数差(IQR,interquatile range)Q3-Q1

(3)绘制箱线图的上下范围,上限为上四分位数,下限为下四分位数。在箱子内部中位数的位置绘制横线

(4)大于上四分位数1.5倍四分位数差的值,或小于下四分位数1.5倍四分位数差的值,划为异常值

(5)异常值之外,最靠近上边缘和下边缘的两个值处,画横线,作为箱线的触须

(6)极端异常值,即超出四分位数差3倍距离的异常值,用实心点表示;较为温和的异常值,即处于1.5倍到3倍之间的异常值,用空心点表示

(7)为箱线图添加名称,数轴等

参数详解

plt.boxplot(x, notch=None, sym=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:是否用线的形式表示均值,默认用点来表示;\
showmeans:是否显示均值,默认不显示;\
showcaps:是否显示箱线图顶端和末端的两条线,默认显示;\
showbox:是否显示箱线图的箱体,默认显示;\
showfliers:是否显示异常值,默认显示;\
boxprops:设置箱体的属性,如边框色,填充色等;\
labels:为箱线图添加标签,类似于图例的作用;\
flierprops:设置异常值的属性,如异常点的形状、大小、填充色等;\
medianprops:设置中位数的属性,如线的类型、粗细等;\
meanprops:设置均值的属性,如点的大小、颜色等;\
capprops:设置箱线图顶端和末端线条的属性,如颜色、粗细等;\
whiskerprops:设置须的属性,如颜色、粗细、线的类型等;

绘制美国电影评分数据箱线图

1
2
data=df[df.产地=='美国']['评分']
data
0        9.600000
1        9.500000
3        9.400000
5        9.400000
6        9.400000
           ...   
38718    7.400000
38720    8.200000
38723    8.100000
38725    7.600000
38729    6.935704
Name: 评分, Length: 11979, dtype: float64
1
2
3
4
5
plt.figure(figsize=(10,6))
plt.boxplot(data,whis=2,flierprops={'marker':'o','markerfacecolor':'r','color':'k'}, ##异常点设置
patch_artist=True,boxprops={'color':'k','facecolor':'#9999ff'}) ##箱体颜色填充
plt.title('美国电影评分箱线图',fontsize=20)
plt.show()

多组数据箱线图

1
2
3
4
5
data1=df[df.产地=='中国大陆']['评分']
data2=df[df.产地=='日本']['评分']
data3=df[df.产地=='中国香港']['评分']
data4=df[df.产地=='英国']['评分']
data5=df[df.产地=='法国']['评分']
1
2
3
4
5
6
7
8
9
10
11
plt.figure(figsize=(12,8))
plt.boxplot([data1,data2,data3,data4,data5],labels=['中国大陆','日本','中国香港','英国','法国'],
whis=2,flierprops={'marker':'o','markerfacecolor':'r','color':'k'},
patch_artist=True,boxprops={'color':'k','facecolor':'g'})
plt.title('电影评分箱线图',fontsize=20)

ax=plt.gca() ##获得坐标系
ax.patch.set_facecolor('gray') ##调整背景颜色
ax.patch.set_alpha(0.3) ##背景颜色透明度

plt.show()



相关系数矩阵图——热力图 pd.plotting.scatter_matrix()和seaborn.heatmap()

相关系数矩阵图

绘制 电影时长、投票人数、评分 的一个相关系数矩阵

1
2
data=df[['投票人数','评分','时长']]
data.head()
投票人数 评分 时长
0 692795 9.6 142
1 42995 9.5 116
2 327855 9.5 116
3 580897 9.4 142
4 478523 9.4 171

Pandas中本身封装了画图函数

画出三个属性之间的散点图,对角线是分布图

1
2
3
%pylab inline
result=pd.plotting.scatter_matrix(data[::100],diagonal='kde', ##kde对角线上使用和密度估计,hist直方图
color='k',alpha=0.3,figsize=(10,10))
Populating the interactive namespace from numpy and matplotlib
热力图

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;如果是False,且没设定vmin和vmax的值,热力图的颜色映射范围根据具有鲁棒性的分位数设定,而不是用极值设定\
\
(3)热力图矩阵块注释参数:\
annot(annotate的缩写):默认取值False;如果是True,在热力图每个方格写入数据;如果是矩阵,在热力图每个方格写入该矩阵对应位置数据\
fmt:字符串格式代码,矩阵上标识数字的数据格式,比如保留小数点后几位数字\
annot_kws:默认取值False;如果是True,设置热力图矩阵上数字的大小颜色字体,matplotlib包text类下的字体设置;\
\
(4)热力图矩阵块之间间隔及间隔线参数:\
linewidths:定义热力图里“表示两两特征关系的矩阵小块”之间的间隔大小\
linecolor:切分热力图上每个矩阵小块的线的颜色,默认值是’white’\
\
(5)热力图颜色刻度条参数:\
cbar:是否在热力图侧边绘制颜色刻度条,默认值是True\
cbar_kws:热力图侧边绘制颜色刻度条时,相关字体设置,默认值是None\
cbar_ax:热力图侧边绘制颜色刻度条时,刻度条位置设置,默认值是None\
\
(6)square:设置热力图矩阵小块形状,默认值是False\
xticklabels, yticklabels:xticklabels控制每列标签名的输出;yticklabels控制每行标签名的输出。默认值是auto。如果是True,则以DataFrame的列名作为标签名。如果是False,则不添加行标签名。如果是列表,则标签名改为列表中给的内容。如果是整数K,则在图上每隔K个标签进行一次标注。 如果是auto,则自动选择标签的标注间距,将标签名不重叠的部分(或全部)输出\
mask:控制某个矩阵块是否显示出来。默认值是None。如果是布尔型的DataFrame,则将DataFrame里True的位置用白色覆盖掉\
ax:设置作图的坐标轴,一般画多个子图时需要修改不同的子图的该值\
**kwargs:All other keyword arguments are passed to ax.pcolormesh

绘制 电影时长、投票人数、评分 的热力图
1
import seaborn as sns
1
2
corr=data.corr()  ##相关系数
corr=abs(corr) ##绝对值(忽略正负相关,只看相关性)
1
2
3
4
5
6
7
8
fig=plt.figure(figsize=(10,8))
ax=fig.add_subplot(111)

ax=sns.heatmap(corr,vmax=1,vmin=0,annot=True,annot_kws={'size':13,'weight':'bold'},linewidth=0.05)

plt.xticks(fontsize=15)
plt.yticks(fontsize=15)
plt.show()