可视化二seaborn

三、强大的seaborn

Seaborn是一个在Python中制作有吸引力和信息丰富的统计图形的库。它建立在matplotlib之上,并与PyData堆栈紧密集成,包括支持来自scipystatsmodelsnumpypandas数据结构和统计例程。 Seaborn旨在将可视化作为探索和理解数据的核心部分。绘图函数对包含整个数据集的数据框和数组进行操作,并在内部执行必要的聚合和统计模型拟合以生成信息图。如果matplotlib“试图让事情变得简单容易和难以实现seaborn会试图使一套明确的方案让事情变得容易。 Seaborn可以认为是对matplotlib的补充,而不是它的替代品。在数据可视化方面能够很好的表现。

       所以我首先从matplotlib说起:

matplotlib 绘图可视化知识点整理:

http://python.jobbole.com/85106/

legend and legend_handler

https://matplotlib.org/api/legend_api.html

 

matplotlib图标正常显示中文

为了在图表中能够显示中文和负号等,需要下面一段设置:

 

 

import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签

plt.rcParams['axes.unicode_minus']=False #用来正常显示负号

 

              1、创建画板

              import matplotlib.pyplot as plt

              %matplotlib inline

              fig=plt.figure()

              2、添加子图

              ax1=fig.add_subplot(221)

              ax2=fig.add_subplot(222)

              ax3=fig.add_subplot(223)

       或者  #创建画板和两行两列的子图 ,axes[0,1]#子图的索引

              fig,axes=plt.subplots(2,2)

       或者

# matplotlib 提供了 subplot(geo) subplots(n_row, n_col) 的方法来绘制子图

# geo 行列值 的组合,具体可见 文档

              # subplot

              ax1=plt.subplot(121)

              ax2=plt.subplot(122)

        3、画图

#简单的话了一个line图,在一张画板中得到两个line图,‘ko--’这类的是color,marker,linestyle的简略版本

            from numpy.random import randn

              plt.plot(randn(50).cumsum(),'ko--')

              plt.plot(randn(50).cumsum(),'go--')

可视化二seaborn

其他版本:

data1=randn(30).cumsum()

data=randn(30).cumsum()

ax=plt.subplot(111)

ax.plot(data1,'k--',label='Default1')

ax.plot(data,linestyle='dashed',c='green',marker='o',label='Default2')#label是标签

ax.legend(loc='best')#loc是位置,有ax.Legend才显示label

plt.show()

可视化二seaborn

子图中画法:与整图相同,只是我们前缀变了

fig2=plt.figure(2)

ax1=fig2.add_subplot(221)

ax1.hist(randn(100),bins=20,color='k',alpha=.5)

ax2=fig2.add_subplot(222)

ax2.scatter(np.arange(30),np.arange(30)+3*randn(30))

ax3=fig2.add_subplot(223)

ax3.plot(randn(50).cumsum(),'k--')

可视化二seaborn

3、子图间距的调整:

fig,axes=plt.subplots(2,2,sharex=True,sharey=True)

for i in range(2):

    for j in range(2):

        axes[i,j].hist(randn(500),bins=50,color='k',alpha=.6)

plt.subplots_adjust(wspace=0,hspace=0)#子图之间的间距,宽度和高度的百分比

可视化二seaborn

4、风格

%pylab inline

%matplotlib inline

import pandas as pd

import numpy  as np

# 随手生成个拉普拉斯分布的数据

data1 = np.random.laplace(size=10000)

# 再来份正态分布的,设均值为 100,标准差为 24,也就是我们常见的 IQ 数据了

data2 = np.random.normal(100, 24, 10000)

       4.1#line图的drawstyle()

plt.plot(data,'k-',drawstyle='steps-post',label='steps-post')

plt.plot(data,linestyle='dashed',c='green',marker='o',label='Default2')

plt.legend(loc='best')可视化二seaborn

#柱状图风格

# hist 绘制分布布, bins=20 指定分为 20 分布区域

# 横轴是分布区域,纵轴是数据集分布在该区域的数量

# 也可使用参数 density=True 绘制概率分布图(将纵轴换为概率密度值)

# subplot

subplot(121)      # 创建一行二列的子图,当前是第一幅

title('data1')    # 标题

r = hist(data1, bins=20, label='14',histtype='stepfilled')

# 绘制图例,可以更改 bbox_to_anchor 的取值来调节图例的位置

legend(loc='lower left', bbox_to_anchor=(0.3, -0.2))

subplot(122)      # 一行二列中的第二幅

title('data2')

r = hist(data2, bins=20, label='24')

legend(loc='center left', bbox_to_anchor=(1, 0.5))

可视化二seaborn

5pandas里面的matplotlib,就是第一章的内容

# pandas DataFrame 也内置了 matplotlib

figure()

df1, df2 = map(pd.DataFrame, (data1, data2))    # data1, data2 转成 pandas DataFrame 格式

 

# 创建子图

ax = subplot(121)        # 也可以使用 fig, axes = subplots(1, 2)

df1[0].hist(ax=ax)       # 若之前使用的是 subplots,这里就用 ax=ax[0]

ax.set_title('data1')

# subplot 2

ax = subplot(122)

ax.set_title('data2')

df1[0].hist(ax=ax)   # ax=axex[1]

可视化二seaborn

6、添加文本

  61简单版

fig=plt.figure()

ax=fig.add_subplot(111)

ax.plot(randn(1000).cumsum(),'r--',label='two')

ax.plot(randn(1000).cumsum(),'k.',label='three')

ax.text(400,20,'hi',fontsize=15)#坐标,文本内容,大小

ax.legend(loc='best')#自动寻找一个图例放置的位置

plt.show()

可视化二seaborn

              62 ax.annotate

fig=plt.figure()

ax=fig.add_subplot(111)

ax.plot(randn(1000).cumsum(),'r--',label='two')

ax.plot(randn(1000).cumsum(),'k.',label='_three_')#双下划綫表示标签不传入       ax.annotate('Hello world!',xy=(400, 20),fontsize=12,#文本,代表数据位置,大小

    xytext=(400,50))#文本放置坐标

ax.legend(loc='best')#自动寻找一个图例放置的位置

plt.show()

可视化二seaborn

#添加箭头或其他符号

import pandas as pd

from datetime import datetime

fig=plt.figure()

ax=fig.add_subplot(111)

data=pd.read_csv(r'C:\Users\11488\Desktop\book\ch09\stock_px.csv',index_col=0, parse_dates=True)

spx=data['SPX']

spx.plot(ax=ax, style='k-')

crisis_data = [

(datetime(2007, 10, 11), 'Peak of bull market'),

(datetime(2008, 3, 12), 'Bear Stearns Fails'),

(datetime(2008, 9, 15), 'Lehman Bankruptcy')

]

for date, label in crisis_data:

    ax.annotate(label, xy=(date, spx.asof(date) + 75),

    xytext=(date, spx.asof(date) + 225),

    arrowprops=dict(facecolor='black', headwidth=4, width=2,

    headlength=4),

    horizontalalignment='left', verticalalignment='top')

# Zoom in on 2007-2010

ax.set_xlim(['1/1/2007', '1/1/2011'])

ax.set_ylim([600, 1800])

ax.set_title('Important dates in the 2008-2009 financial crisis')

 

 

接下里就到强大的seaborn

1  set_style( )  set( )

set_style( )是用来设置主题的,Seaborn有五个预设好的主题: darkgrid , whitegrid , dark , white , ticks  默认: darkgrid

import matplotlib.pyplot as plt

import seaborn as sns

sns.set_style("whitegrid")

plt.plot(np.arange(10))

plt.show()

 

set( )通过设置参数可以用来设置背景,调色板等,更加常用。

import seaborn as sns

import matplotlib.pyplot as plt

sns.set(style="white", palette="muted", color_codes=True)     #set( )设置主题,调色板更常用

plt.plot(np.arange(10))

plt.show()

可视化二seaborn

with sns.color_palette("husl", 8):

    sns.set(style="dark",color_codes=True)     #set( )设置主题,调色板更常用

    plt.plot(np.arange(10))

plt.show()

详情见:

http://seaborn.pydata.org/generated/seaborn.color_palette.html#seaborn.color_palette

可视化二seaborn

2  distplot( )  kdeplot( )

distplot( )hist加强版,kdeplot( )为密度曲线图 

import matplotlib.pyplot as plt

import seaborn as sns

df_iris = pd.read_csv(r'C:\Users\11488\Desktop\Data set\seaborn-data-master\iris.csv')

fig, axes = plt.subplots(1,2)

sns.distplot(df_iris['petal_length'], ax = axes[0], kde = True, rug = True)        # kde 密度曲线  rug 边际毛毯

sns.kdeplot(df_iris['petal_length'], ax = axes[1], shade=True)                     # shade  阴影                      

plt.show()

可视化二seaborn

import numpy as np

import seaborn as sns

import matplotlib.pyplot as plt

sns.set(style="darkgrid",color_codes=True)

sns.color_palette("husl", 8)

rs = np.random.RandomState(10)

d = rs.normal(size=100)

f, axes = plt.subplots(2, 2, figsize=(7, 7), sharex=True)

sns.distplot(d, kde=False, color="b", ax=axes[0, 0])

sns.distplot(d, hist=False, rug=True, color="r", ax=axes[0, 1])

sns.distplot(d, hist=False, color="g", kde_kws={"shade": True}, ax=axes[1, 0])

sns.distplot(d, color="m", ax=axes[1, 1])

plt.show()

可视化二seaborn

箱型图 boxplot( )

sns.boxplot(x = df_iris['species'],y = df_iris['sepal_width'])

plt.show()

可视化二seaborn

import matplotlib.pyplot as plt

import os

os.chdir(r'C:\Users\11488\Desktop\Data set\seaborn-data-master')

import seaborn as sns

tips = pd.read_csv('tips.csv')

sns.set(style="ticks")                                     #设置主题

sns.boxplot(x="day", y="total_bill", hue="sex", data=tips, palette="husl")   #palette 调色板

plt.show()

可视化二seaborn

4  联合分布jointplot( )

tips = pd.read_csv('tips.csv')   #右上角显示相关系数

sns.jointplot("total_bill", "tip", tips)

plt.show()

可视化二seaborn

tips = pd.read_csv('tips.csv')   #右上角显示相关系数

with sns.axes_style('white'):

    sns.jointplot("total_bill", "tip", tips,kind='reg')# kind : { "scatter" | "reg" | "resid" | "kde" | "hex" }, optional #Kind of plot to draw.

plt.show()

可视化二seaborn

5  热点图heatmap( )#我们常用热力图显示变量关系

data = pd.read_csv("car_crashes.csv")

data = data.corr()

sns.heatmap(data,robust=True,cmap='YlGnBu',vmin=0, vmax=1,cbar=True)

plt.show()

可视化二seaborn

6  pairplot( )

data = pd.read_csv("iris.csv")

sns.set()                        #使用默认配色

sns.pairplot(data,hue="class")   #hue 选择分类列

plt.show()

可视化二seaborn

sns.pairplot(data, vars=["sepal_width", "sepal_length"],hue='species',palette="Set1") 

plt.show()

可视化二seaborn

7  FacetGrid( )

import seaborn as sns

import matplotlib.pyplot as plt

tips = pd.read_csv('tips.csv')

g = sns.FacetGrid(tips, col="time",  row="smoker")

g = g.map(plt.hist, "total_bill",  color="b")

plt.show()

可视化二seaborn

#hue分组,colp_order人为设置顺序

g = sns.FacetGrid(tips, col="smoker", hue='time',col_order=["Yes", "No"])

g = g.map(plt.hist, "total_bill", bins=bins,stacked=True).add_legend()

可视化二seaborn

#设置参数:大小,线宽,边缘色

kws = dict(s=50, linewidth=.5, edgecolor="w")

g = sns.FacetGrid(tips, col="sex", hue="time", palette="Set1",hue_order=["Dinner", "Lunch"])

g=(g.map(plt.scatter,"total_bill","tip",**kws).add_legend().set_titles('hi',fontsize=12,loc='right')#添加legend,设置标题,这里不能识别更为一般的位置参数

) 可视化二seaborn

pal = dict(Lunch="seagreen", Dinner="gray")

g = sns.FacetGrid(tips, col="sex", hue="time", palette=pal,

 hue_order=["Dinner", "Lunch"])

g = (g.map(plt.scatter, "total_bill", "tip", **kws).add_legend().set_axis_labels("Total bill (US Dollars)", "Tip"))#增加标签

可视化二seaborn