熟悉seaborn的调色板
目录
Python 简介
Python 特点
认识数据分析
(1)定性调色板
1、使用圆形颜色系乡当有任意数量的类别需要区分时,较简单的方法是在圆形颜色空间中绘制均匀间隔的颜色(色调在保持度和饱和度不变的同时变化)。在需要使用的颜色比默认颜色周期中设置的颜色更多时,常使用圆形颜色系统设置图案颜色。
2、使用xkcd颜色
(2)连续调色板
Python 简介
Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。
Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。
Python 是一种解释型语言: 这意味着开发过程中没有了编译这个环节。类似于PHP和Perl语言。
Python 是交互式语言: 这意味着,您可以在一个 Python 提示符 >>> 后直接执行代码。
Python 是面向对象语言: 这意味着Python支持面向对象的风格或代码封装在对象的编程技术。
Python 是初学者的语言:Python 对初级程序员而言,是一种伟大的语言,它支持广泛的应用程序开发,从简单的文字处理到 WWW 浏览器再到游戏。
Python 特点
1.易于学习:Python有相对较少的关键字,结构简单,和一个明确定义的语法,学习起来更加简单。
2.易于阅读:Python代码定义的更清晰。
3.易于维护:Python的成功在于它的源代码是相当容易维护的。
4.一个广泛的标准库:Python的最大的优势之一是丰富的库,跨平台的,在UNIX,Windows和Macintosh兼容很好。
5.互动模式:互动模式的支持,您可以从终端输入执行代码并获得结果的语言,互动的测试和调试代码片断。
6.可移植:基于其开放源代码的特性,Python已经被移植(也就是使其工作)到许多平台。
7.可扩展:如果你需要一段运行很快的关键代码,或者是想要编写一些不愿开放的算法,你可以使用C或C++完成那部分程序,然后从你的Python程序中调用。
8.数据库:Python提供所有主要的商业数据库的接口。
9.GUI编程:Python支持GUI可以创建和移植到许多系统调用。
10.可嵌入: 你可以将Python嵌入到C/C++程序,让你的程序的用户获得"脚本化"的能力。
认识数据分析
数据分析是大数据技术的重要组成部分。近年来,随着大数据技术的逐渐发展,数据分析技能被认为是数据科学领域中数据从业人员需要具备的技能之一。与此同时,数据分析师也成了时下最热门的职业之一.掌握数据分析技能是一个循序渐进的过程,明确数据分析概念、流程和应用场景等相关知识是掌握数据分析的第一步。
Jupyter Notebook(此前被称为 IPython Notebook)是一个交互式笔记本,支持运行 40 多种编程语言,本质上是一个支持实时代码、数学方程可视化和 Markdow 的 Web 应用程序。对于数据分析,Jupyter Notebook的优点是可以重现整个分析过程,并将说明文字、代码、图表、公式和结论都整合在一个文档中。用户可以通过电子邮件、Dropbox、GitHub 和Jupyter Notebook Viewer 将分析结果分享给其他人。
颜色在可视化中非常重要,可用于代表各种特征,并且提高整个图的观赏性。如果有效地使用颜色,那么可以显示数据中的图案;如果颜色使用不当,那么将会隐藏数据中图案。在seaborn中颜色由调色板控制,因此调色板是seaborn库中绘制图形的基础。常用于调色板的函数及其作用如表所示。
常用于调色板的函数及其作用
| 函数名称 | 函数作用 |
| hls palette | 用于控制调色板颜色的亮度和饱和 |
| xkcd_palette | 使用xkcd颜色中的颜色名称创建调色板 |
| cubehelix_palette | 用于创建连续调色板 |
| light_palette | 用于创建颜色从浅色到深色的连续调色板 |
| dark palette | 用于创建颜色从深色到深色混合的连续调色板 |
| choose_light_palette | 启动交互式小部件以创建浅色连续调色板 |
| choose_dark_palette | 启动交互式小部件以创建深色连续调色板 |
| diverging_palette | 用于创建离散调色板 |
| choose_diverging palette | 启动交互式小部件选择不同的调色板,与diverging palette函数功能相对应 |
| color_palette | 用于返回定义调色板的颜色列表或连续颜色图 |
| set palette | 用于设置调色板,为所有图设置默认颜色周期 |
通常在不知道数据具体特征的情况下,是无法得知使用什么类型的调色板或颜色映射最优的。因此,将使用定性调色板、连续调色板和离散调色板3种不同类型的调色板,用于区分使用color_palette函数的不同情况。除此之外还可以使用set_palette函数将调色板设置为默认调色板。
(1)定性调色板
当需要区分没有固有顺序的离散数据区块时,定性(或分类)调色板是较佳先择。在导入seaborn 库后、默认颜色周期将更改为10种颜色
seabron默认颜色周期
sns.palplot(sns.color_palette())

默认颜色主题有deep、muted、pastel、bright、dark和colorblind等,默认为deep,导入不同颜色主题
palette = sns.color_palette('bright')sns.palplot(palette)

在使用定性调色板时可对调色板进行调整,具体如下。
1、使用圆形颜色系乡当有任意数量的类别需要区分时,较简单的方法是在圆形颜色空间中绘制均匀间隔的颜色(色调在保持度和饱和度不变的同时变化)。在需要使用的颜色比默认颜色周期中设置的颜色更多时,常使用圆形颜色系统设置图案颜色。
较常用的方法是使用HLS(H表示色调、L表示亮度、S表示饱和度)颜色空间,可由RGB(R代表红色、G代表绿色、B代表蓝色)颜色空间通过简单转换得到
HLS颜色空间
sns.palplot(sns.color_palette('hls',8))

使用hls_palette函数可以控制颜色的亮度和饱和度
控制颜色亮度和饱和度
sns.palplot(sns.hls_palette(8, l=.3, s=.8)) #l控制亮度,s控制饱和度

调节亮度和饱和度在视觉一致
sns.palplot(sns.color_palette('husl',8))

2、使用xkcd颜色
xkcd 颜色是通过对上万名参与者进行调查而总结导出的,产生了954个最常用的颜色。可以随时通过xkcd_rgb字典装饰器调用这些颜色,也可以通过xkcd_palette 函数自定义调色板。
xkcd颜色使用示例
plt.rcParams['font.sans-serif'] = ['SimHei']plt.plot(x,y1,sns.xkcd_rgb['pale red'],lw=3)plt.plot(x,y2,sns.xkcd_rgb['medium green'],lw=3)plt.plot(x,y3,sns.xkcd_rgb['denim blue'],lw=3)plt.title('线条颜色示例')plt.show()

#自定义定性调色板colors = ['windows blue','amber','greyish','faded green','dusty purple']sns.palplot(sns.xkcd_palette(colors))

(2)连续调色板
当数据存在一定顺序时,通常使用连续映射。对于连续的数据,使用在色调有相对细微变化、在亮度和饱和度上有很大变化的调色板,将会自然地展现数据中相对要的部分。连续调色板的设置法如下。
1 Color Brewer 库
在 Color Brewer库中有大量的连续调色板,以调色板中的主色(或颜色)命名,如果需要反转亮度,那么可以为调色板名称添加后缀“_r实现。如果觉得颜色鲜艳的线难以区分,那么可以使用seaborn库增加的一个没有动态范围的“dark”面板。只需为调色板名称添加后缀“_d”,即可切换至“dark”面板
绘制连续调色板、亮度反转及切换面板
sns.palplot(sns.color_palette('Greens'))sns.palplot(sns.color_palette('YlOrRd_r'))sns.palplot(sns.color_palette('YlOrRd_d'))



使用cubehelix_palette函数生成调色板对象并传入绘图函数
②cubehelix调色板
通过cubehelix制作连续调色板,将得到线性增加或降低亮度的色图,这意味着映射信息会在用黑色和白色保存(如用于印刷)时或被色盲的人浏览时得以保留。在 seaborm库中,可使用cubehelix palette 函数制作 cubehelix调色板。
sns.palplot(sns.cubehelix_palette(8,start=1,rot=0))

-
x,y = np.random.multivariate_normal([0,0],[[1,-.5],[-.5,1]],size=300).T -
cmap = sns.cubehelix_palette(as_cmap=True) # 生成调色板对象 -
sns.kdeplot(x=x,y=y,cmap=cmap,shade=True) -
plt.title('连续调色板') -
plt.show()

③自定义连续调色板
对于自定义连续调色板,可以调用light_palette 函数和dark_palette 函数进行单一颜色“播种”,“种子”可以用于产生单一颜色从浅色到深色的调色板。如果使用的是IPython Notebook(供 Jupyter Notebook 使用的一个 Jupyter 内核组件),light_palette 函数和dark palette 函数还可以分别与choose_light palette 函数和choose_dark palette 函数启动交互式小部件创建单一颜色的调色板。
任何有效的 Matplotlib 颜色都可以传递给 light palette 函数和dark palette 函数,包括HLS 颜色空间或 HUSL 颜色空间的RGB元组和xkcd颜色。自定义连续调色板并将其传入绘图函数
自定义连续调色板并将其传入绘图函数
sns.palplot(sns.light_palette('blue'))sns.palplot(sns.dark_palette('yellow'))


# 使用HUSH颜色作为种子pal = sns.dark_palette((200,80,60),input='husl',reverse=True,as_cmap=True)sns.kdeplot(x=x,y=y,cmap=pal)plt.title('自定义连续调色板')plt.show()

(3)离散调色板
离散调色板用于数据的高值和低值都有非常重要的数据意义的情况下,这些数据通常有一个定义明确的中点。例如,如果需要绘制某个基线时间点的温度变化,那么使用离散调色板显示相对减少的区域或相对增加的区域将会得到相对较好的效果。
选择离散调色板的原则是,起始色调和结束色调具有相似的亮度和饱和度,并且经过色调偏移后在中点处和谐相遇。同时,需要尽量避免使用红色与绿色,离散调色板的设置情况如下。
①默认的离散调色板
在Color Brewer库中有一组精心设计的离散调色板,Color Brewer库中的离散调色板
sns.palplot(sns.color_palette('BrBG',7))sns.palplot(sns.color_palette('RdBu_r',7))


sns.palplot(sns.color_palette('coolwarm',7))

sns.palplot(sns.diverging_palette(240,10,n=7))sns.palplot(sns.diverging_palette(150,275,s=80,l=55,n=7))# 创建中间是暗色的调色板sns.palplot(sns.diverging_palette(250,15,s=75,l=40,n=7,center='dark'))# 通过sep参数控制中间区域渐变宽度sns.palplot(sns.diverging_palette(150,275,s=80,l=55,n=7,sep=80))




x = np.arange(1,10,2)y1 = x + 1y2 = x + 3y3 = x + 5def showLine(flip=1):sns.lineplot(x=x,y=y1)sns.lineplot(x=x,y=y2)sns.lineplot(x=x,y=y3)# 使用默认调色板showLine()plt.title('默认调色板')plt.show()

sns.set_palette('YlOrRd_d')showLine()plt.title('使用set_palette函数设置调色板')plt.show()

sns.set() #恢复所有默认设置
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
pic = plt.figure(figsize=(8,4))
with sns.color_palette('PuBuGn_d'): #设置临时调色板pic.add_subplot(1,2,1)showLine()plt.title('使用color_palette函数设置调色板')
pic.add_subplot(1,2,2) #使用默认调色板
showLine()
plt.title('默认调色板')
plt.show()

# 代码5-31
boston=pd.read_csv('E:/xsy/python数据分析/data/boston_house_prices.csv',encoding='gbk')
plt.rcParams['axes.unicode_minus']=False
corr=boston.corr() #特征的相关系数矩阵
sns.heatmap(corr) #,vmin=0.0,vmax=100.0,center=1.0,robust=True,annot=True,fmt=.2f,linewidths=5,linecolor=black,square=True
plt.title('特征矩阵热力图')
plt.show()

# 代码5-32
plt.figure(figsize=(10,10))
sns.heatmap(corr,annot=True,fmt='.2f')
plt.title('特征矩阵热力图')
plt.show()

# 代码5-33
# 提取部门为销售部、离职为1的数据
sale = hr.iloc[(hr['部门'].values=='销售部') & (hr['离职'].values==1),:]
sns.stripplot(x = sale['每月平均工作小时数(小时)'])
plt.title('简单水平分布散点图')
plt.show()

# 代码5-34
#提高离职为1的数据
hr1 = hr.iloc[hr['离职'].values==1,:]
plt.figure(figsize=(10,5))
plt.subplot(121)
plt.xticks(rotation=70)
sns.stripplot(x='部门',y='每月平均工作小时数(小时)',data=hr1) #默认添加随机噪声
plt.title('默认添加随机噪声')
plt.subplot(122)
plt.xticks(rotation=70)
sns.stripplot(x='部门',y='每月平均工作小时数(小时)',data=hr1,jitter=False) #不添加随机噪声
plt.title('无随机噪声')
plt.show()

# 代码5-35
# 提取高薪在职的数据
hr2 = hr.iloc[(hr['薪资'].values=='高') & (hr['离职'].values==0),:]
sns.stripplot(x='5年内升职',y='每月平均工作小时数(小时)',hue='部门',data=hr2,jitter=True) #以部门作为颜色分类
plt.title('前5年是否晋升与平均每月工作时长')
plt.show()

# 代码5-36
plt.figure(figsize=(10,13))
plt.subplot(211)
plt.xticks(rotation=70)
plt.title('不同部门的平均每月工作时长')
sns.stripplot(x='部门',y='每月平均工作小时数(小时)',hue='5年内升职',data=hr2)
plt.subplot(212)
plt.xticks(rotation=70)
sns.stripplot(x='部门',y='每月平均工作小时数(小时)',hue='5年内升职',data=hr2,dodge=True)
plt.show()

# 代码5-37
sns.swarmplot(x='部门',y='每月平均工作小时数(小时)',data=hr2)
plt.xticks(rotation=70)
plt.title('不同部门的平均每月工作时长')
plt.show()

# 代码5-38
sns.swarmplot(x='部门',y='每月平均工作小时数(小时)',hue='5年内升职',data=hr2)
plt.xticks(rotation=70)
plt.title('不同部门的平均每月工作时长')
plt.show()

# 代码5-39
fig,axes = plt.subplots(1,2,figsize=(8,4))
axes[0].set_title('修改前的线性回归拟合图')
axes[1].set_title('修改前的线性回归拟合图')
sns.regplot(x='房间数(间)',y='房屋价格(美元)',data=boston,ax=axes[0])
sns.regplot(x='房间数(间)',y='房屋价格(美元)',data=boston,ci=50,ax=axes[1])
plt.show()

# 代码5-40
# 最大携氧能力、体重和运动后心率的三维散点图
import pandas as pd
import numpy as np
from pyecharts import options as opts
from pyecharts.charts import Scatter3Dplayer_data = pd.read_excel('E:/xsy/python数据分析/data/运动员的最大携氧能力、体重和运动后心率数据.xlsx')
player_data = [player_data['体重(kg)'], player_data['运动后心率(次/分钟)'],
player_data['最大携氧能力(ml/min)']]
player_data = np.array(player_data).T.tolist()
s = (Scatter3D().add('', player_data, xaxis3d_opts=opts.Axis3DOpts(name='体重(kg)'), yaxis3d_opts=opts.Axis3DOpts(name='运动后心率(次/分钟)'), zaxis3d_opts=opts.Axis3DOpts(name='最大携氧能力(ml/min)')).set_global_opts(title_opts=opts.TitleOpts(title='最大携氧能力、体重和运动后心率3D散点图'), visualmap_opts=opts.VisualMapOpts(range_color=['#1710c0', '#0b9df0', '#00fea8', '#00ff0d', '#f5f811', '#f09a09', '#fe0300'])))
s.render_notebook()

# 代码5-41from pyecharts.charts import Funneldata = pd.read_excel('E:/xsy/python数据分析/data/某淘宝店铺的订单转化率统计数据.xlsx')x_data = data['网购环节'].tolist()y_data = data['人数'].tolist()data = [[x_data[i], y_data[i]] for i in range(len(x_data))]funnel = (Funnel().add('', data_pair=data,label_opts=opts. LabelOpts(position='inside', formatter='{b}:{d}%'), gap=2,tooltip_opts=opts.TooltipOpts(trigger='item'),itemstyle_opts=opts.ItemStyleOpts(border_color='#fff', border_width=1)).set_global_opts(title_opts=opts.TitleOpts(title='某淘宝店铺的订单转化率漏斗图'),legend_opts=opts.LegendOpts(pos_left='40%')))funnel.render_notebook()

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
