公众号:尤而小屋
作者:Peter
编辑:Peter
大家好,我是Peter~
今天给大家推荐一个高级的可视化神器:cufflinks
学习过可视化库matplotlib和seaborn的朋友都知道:seaborn是matplotlib的高级封装。在这里小编也告诉你:cufflinks就是plotly的高级封装。
plotly的绘图已经够简洁和优雅,没有想到cufflinks更甚之。在这里用一句话形容cufflinks:
cufflinks之于plotly,犹如seaborn之于matplotlib
一个美不胜收的可视化库cufflinks
那到底什么是cufflinks呢?
cufflinks是一个基于Python的数据可视化库,它建立在Plotly库之上,为用户提供了一种简单而强大的方式来创建交互式的、美观的图表和可视化。它的设计旨在使绘图过程变得简单且具有灵活性,无需编写复杂的代码。
使用cufflinks可以轻松地将Pandas DataFrame和Series对象转换为交互式图表。它提供了与Pandas紧密集成的API,使数据可视化的过程变得直观且易于操作。通过几行简单的代码,就可以创建各种类型的图表,包括线图、柱状图、散点图、面积图、箱线图、热图等。
cufflinks还具有许多便捷的功能和选项,可让用户自定义图表的外观和样式。此外可以设置标题、轴标签、颜色、图例等,并通过拖动和缩放等交互式功能与图表进行互动。
此外,cufflinks还提供了简便的导出功能,可以将生成的图表保存为静态图像或动态HTML文件,以便与他人共享或嵌入到网页中。
安装
安装非常简单:
pip install cufflinks
# 建议用清华源加速
pip install cufflinks -i https://pypi.tuna.tsinghua.edu.cn/simple
使用
In [1]:
import pandas as pd
import numpy as np
import cufflinks as cf
# 设置配置文件
# theme的7个选择项: 'ggplot', 'pearl', 'solar', 'space', 'white', 'polar', 'henanigans'
cf.set_config_file(world_readable=True, theme="pearl", offline=True)
%reload_ext autoreload
%autoreload 2
查看cufflinks的帮助文档,目前cufflinks绘制的图形:
In [2]:
cf.help()
查看某个图形的参数:
In [3]:
cf.help("violin")
使用说明:
DataFrame.Figure.iplot()
- DataFrame:pandas中的数据框
- Figure:指定图形,比如box、bar等
- iplot():参数设置
参数说明:
df.iplot(
kind='scatter',data=None,layout=None,filename='',sharing=None,
title='',xTitle='',yTitle='',zTitle='',theme=None,
colors=None,colorscale=None,fill=False,width=None,dash='solid',
mode='',interpolation='linear',symbol='circle',size=12,barmode='',
sortbars=False,bargap=None,bargroupgap=None,bins=None,histnorm='',
histfunc='count',orientation='v',boxpoints=False,annotations=None,keys=False,
bestfit=False,bestfit_colors=None,mean=False,mean_colors=None,categories='',
x='',y='',z='',text='',gridcolor=None,zerolinecolor=None,
margin=None,labels=None,values=None,secondary_y='',secondary_y_title='',
subplots=False,shape=None,error_x=None,error_y=None,error_type='data',
locations=None,lon=None,lat=None,asFrame=False,asDates=False,
asFigure=False,asImage=False,dimensions=None,asPlot=False,asUrl=False,online=None,**kwargs,
)
cufflinks的7大绘图主题风格:
In [4]:
cf.getThemes()
Out[4]:
['ggplot', 'pearl', 'solar', 'space', 'white', 'polar', 'henanigans']
cufflinks支持的色盘:
In [5]:
cf.colors.scales()
数据说明
我们使用sklearn自带的iris数据集:
In [6]:
from sklearn import datasets
iris = datasets.load_iris()
In [7]:
df = pd.DataFrame(iris.data,columns=iris.feature_names)
df.head(3)
Out[7]:
sepal length (cm) | sepal width (cm) | petal length (cm) | petal width (cm) | |
---|---|---|---|---|
0 | 5.1 | 3.5 | 1.4 | 0.2 |
1 | 4.9 | 3.0 | 1.4 | 0.2 |
2 | 4.7 | 3.2 | 1.3 | 0.2 |
In [8]:
df["target"] = iris.target
df.head(3)
Out[8]:
sepal length (cm) | sepal width (cm) | petal length (cm) | petal width (cm) | target | |
---|---|---|---|---|---|
0 | 5.1 | 3.5 | 1.4 | 0.2 | 0 |
1 | 4.9 | 3.0 | 1.4 | 0.2 | 0 |
2 | 4.7 | 3.2 | 1.3 | 0.2 | 0 |
基于对应关系进行转换:
0:'setosa', 1:'versicolor', 2:'virginica'
In [9]:
df["id"] = df["target"].map({0:'setosa', 1:'versicolor', 2:'virginica'})
df.head(3)
Out[9]:
sepal length (cm) | sepal width (cm) | petal length (cm) | petal width (cm) | target | id | |
---|---|---|---|---|---|---|
0 | 5.1 | 3.5 | 1.4 | 0.2 | 0 | setosa |
1 | 4.9 | 3.0 | 1.4 | 0.2 | 0 | setosa |
2 | 4.7 | 3.2 | 1.3 | 0.2 | 0 | setosa |
折线图
默认是折线图
In [10]:
df.iplot()
# df.iplot(kind="scatter") # 等价
对折线进行填充:
In [11]:
df.iplot(kind="scatter",fill=True)
散点图
In [12]:
df.iloc[:100,:4].iplot(kind="scatter",
mode="markers", # 指定类型
# colors=["red","orange","blue","black"], # 颜色
size=7, # 大小
theme="henanigans", # 指定主题
symbol="star" # 散点形状;默认是圆点
)
绘制带有回归趋势的散点图:
In [13]:
df.iloc[:,:3].iplot(kind="scatter",
mode="markers",
bestfit=True, # 拟合趋势
bestfit_colors=["red","blue","black"] # 拟合线颜色
)
气泡图
In [14]:
df.iplot(kind="bubble",x="sepal length (cm)",y="sepal width (cm)",size="target")
柱状图
In [15]:
df.head(20).iplot(kind="bar")
# 堆叠柱状图
df.iplot(kind="bar", barmode="stack")
取出部分dataframe数据下绘图:
In [17]:
df.iloc[:30,:3].iplot(kind="bar", barmode="stack")
水平柱状图
In [18]:
df.iloc[:20,:2].iplot(kind="barh", barmode="stack")
也可以通过参数orientation进行设置:v-垂直方向,h-水平方向
In [19]:
df.iloc[:20,:2].iplot(kind="bar",
barmode="stack",
orientation="h",
theme="space", # 指定主题
)
箱型图box
In [20]:
df.iloc[:60,:4].iplot(kind="box")
# ['all', 'outliers', 'suspectedoutliers', False]
df.iloc[:60,:4].iplot(kind="box",boxpoints="all")
df.iloc[:60,:4].iplot(kind="box",boxpoints="outliers")
df.iloc[:60,:4].iplot(kind="box",boxpoints="suspectedoutliers")
直方图
In [24]:
df.iloc[:,:4].iplot(kind="histogram")
小提琴图
In [25]:
df.columns
Out[25]:
Index(['sepal length (cm)', 'sepal width (cm)', 'petal length (cm)', 'petal width (cm)', 'target', 'id'],
dtype='object')
In [26]:
df.iloc[:,:].iplot(kind="violin",data_header='sepal length (cm)')
热力图heatmap
我们需要先生成透视表的数据:
In [27]:
data = pd.pivot_table(df,index="id",values=["sepal length (cm)","sepal width (cm)"])
data
Out[27]:
sepal length (cm) | sepal width (cm) | |
---|---|---|
id | ||
setosa | 5.006 | 3.428 |
versicolor | 5.936 | 2.770 |
virginica | 6.588 | 2.974 |
In [28]:
data.iplot(kind="heatmap")
3d图
In [29]:
df.iplot(kind="scatter3d",
x="sepal length (cm)", # 指定三个轴的数据
y="sepal width (cm)",
z="petal length (cm)",
categories="id",
xTitle="sepal length", # 指定3个轴的标题
yTitle="sepal width",
zTitle="petal length"
)
散点矩阵图
In [30]:
df.iloc[:,:4].scatter_matrix()
子图
In [31]:
df.iloc[:,:4].iplot(kind="bar",
barmode="stack", # 模式
title="绘制子图", # 标题
subplots=True, # 子图开始
shape=(2,2), # n行m列
shared_xaxes=True, # 是否共享x轴
vertical_spacing=0.08, # 垂直和水平间距
horizontal_spacing=0.05,
subplot_titles=True, # 开启子图名称
legend=False # 是否显示图例
)