(二十一)Seaborn知识学习8-python数据分析与机器学
文章原创,最近更新:2018-05-17
课程来源: python数据分析与机器学习实战-唐宇迪
引言:介绍seaborn热度图绘制
学习参考链接:
1、Seaborn官方0.8.1版本
首先介绍以下热度图的作用,拿出离散群数据,离散群数据可能会发生波动变化.看一下哪个点的值比较高,看一下哪个点的值比较低?通过值的变化,用颜色表现出来,这个是我们要做的一件事.
热度图是由不同的颜色构成的,这个颜色由可能是由浅入深,有可能是有深入浅.这里颜色是0.5-0.9之间,好比今天的股票涨幅的情况,涨幅比较低的情况下用0.5来表示,涨幅比较高,可以用0.8表示.
用热度图颜色的差异很方便的看出,那个点的值是偏高还是偏低?我们通过一个小例子来了解一下热度图:
案例代码如下:
import seaborn as sns
import numpy as np
np.random.seed(0)
sns.set()
uniform_data=np.random.rand(3,3)
print(uniform_data)
heatmap=sns.heatmap(uniform_data)
输出结果如下:
[[ 0.5488135 0.71518937 0.60276338]
[ 0.54488318 0.4236548 0.64589411]
[ 0.43758721 0.891773 0.96366276]]
从输出的结果可以看出,右边有个类似与调色板的东西,取值范围是0.5-0.8.比如0.5488135这个值,就会在调色板里面的颜色范围取值,这个取值偏紫色,就会画出紫色的颜色.
可以通过颜色的差异,知道什么样的值偏高,什么样的值偏低?比如这里,颜色偏黑的,值比较小,颜色偏白的,值比较大.
那么想设置调色板取值区间的设置,又应该怎么样设置呢?
在heatmap函数()增加vmin最小的取值以及vmax最大的取值属性的设置.
案例代码如下:
import seaborn as sns
import numpy as np
np.random.seed(0)
sns.set()
uniform_data=np.random.rand(3,3)
print(uniform_data)
heatmap=sns.heatmap(uniform_data,vmin=0.2,vmax=0.8)
输出结果如下:
[[ 0.5488135 0.71518937 0.60276338]
[ 0.54488318 0.4236548 0.64589411]
[ 0.43758721 0.891773 0.96366276]]
从输出的结果可以看出,数据没变,但是数据相对应的颜色变了,没改变颜色数值之前0.891773对应的颜色是橙色,改变颜色数值之后0.891773对应的颜色是偏奶白色,因为只要是数字大于0.75都是奶白色的区间.
比如拿到一组数据是权重参数,这个参数可能有正值,也有负值,比如一个股票,正值代表升了,负值代表跌了.,怎么设置调色板的中间值为0?
在heatmap函数()增加center=0属性的设置.
案例代码如下:
import seaborn as sns
import numpy as np
np.random.seed(3)
sns.set()
uniform_data=np.random.randn(3,3)
print(uniform_data)
heatmap=sns.heatmap(uniform_data,center=0)
输出结果如下:
[[ 1.78862847 0.43650985 0.09649747]
[-1.8634927 -0.2773882 -0.35475898]
[-0.08274148 -0.62700068 -0.04381817]]
从输出的结果可以看出,中心值0以上的颜色与中心值以下的颜色都是不一样的,而且差异非常大.
在seanborn库有自带的一个数据集叫"flights",我们先看看这个数据集前5行是什么样的?
案例代码如下:
import seaborn as sns
flights=sns.load_dataset("flights")
print(flights.head())
输出结果如下:
year month passengers
0 1949 January 112
1 1949 February 118
2 1949 March 132
3 1949 April 129
4 1949 May 121
从输出结果可以看出,("flights"数据集记录的是航班每一年每个月份的乘客数量.比如1949年1月份,乘客有112名.
如何从"flights"数据集中表达横轴年份与纵轴月份之间的乘客关系?并由不同的颜色表示?
首先我们先查看用pivot()函数画出的以x轴以"month", y轴以"year",坐标上的点 "passengers".
案例代码如下:
import seaborn as sns
flights=sns.load_dataset("flights")
flights = flights.pivot("month", "year", "passengers")
ax=sns.heatmap(flights)
输出结果如下:
颜色的调色板的取值范围,在未设定的情况下是根据数据的最大值以及最小值进行自动调整的.从1949年到1960年乘客的数量由偏黑色转向到偏淡橘色.也由此说明了人数由少慢慢开始偏多.
能否将每年每月份相对应的乘客画到对应的图中呢?
需要在headmap()函数增加annot=True的属性就可以将对应的人数显示出来,增加fmt="d",就是将字体的颜色设置为d.
具体案例代码如下:
import seaborn as sns
flights=sns.load_dataset("flights")
flights = flights.pivot("month", "year", "passengers")
ax=sns.heatmap(flights,annot=True,fmt="d")
输出结果如下:
怎么设置每个数据绘制的对应颜色有间距呢?
headmap()函数增加linewidths=.5,即可设置间距的大小
案例代码如下:
import seaborn as sns
flights=sns.load_dataset("flights")
flights = flights.pivot("month", "year", "passengers")
ax=sns.heatmap(flights,linewidths=.5)
输出结果如下:
有间距可以看差距可以更加明显一点.推荐增加.
怎么指定调色板?
headmap()函数增加cmap="YlGnBu",即可设置调色板的颜色.
案例代码如下:
import seaborn as sns
flights=sns.load_dataset("flights")
flights = flights.pivot("month", "year", "passengers")
ax=sns.heatmap(flights,cmap="YlGnBu")
输出结果如下:
怎么隐藏绘图右边的调色板
headmap()函数增加cbar=False,即可以隐藏.
案例代码如下:
import seaborn as sns
flights=sns.load_dataset("flights")
flights = flights.pivot("month", "year", "passengers")
ax=sns.heatmap(flights,cbar=False)
输出结果如下:
最好还是把调色板显示出来哦.