绘制数据的直方图及其概率密度曲线

这里可以使用 seaborn.displot() 来绘制,如果指定kde参数为False,就不会画概率密度曲线



1 import pandas as pd
 2 import seaborn as sns
 3 import matplotlib.pyplot as plt
 4 
 5 titanic = pd.read_csv('seaborn_test\\train.csv')
 6 cols = ['Survived', 'Pclass', 'Sex', 'Age', 'SibSp', 'Parch', 'Fare', 'Embarked']
 7 titanic = titanic[cols].dropna()
 8 
 9 sns.distplot(titanic['Age'])
10



运行结果:

  

Python将多条重叠曲线合并成一条 python绘制多条曲线_java

 下面展示没有概率密度曲线的直方图和用gamma拟合的概率密度曲线:



1 x = np.random.normal(size=100)
2 sns.distplot(x, kde=False)  # kde 核密度估计
3 plt.show()
4 from scipy import stats, integrate
5 x = np.random.gamma(6, size=200)
6 sns.distplot(x, kde=False, fit=stats.gamma)
7



  运行结果:

  

Python将多条重叠曲线合并成一条 python绘制多条曲线_概率密度_02

 

Python将多条重叠曲线合并成一条 python绘制多条曲线_数据_03

 

在一个画布上绘制多条曲线


1 def sinplot(flip=1):2     x = np.linspace(0, 14, 100)
3     for i in range(1, 7):
4         plt.plot(x, np.sin(x + i * .5) * (7 - i) * flip)
5 
6 
7 sinplot()
8


运行结果:

  

Python将多条重叠曲线合并成一条 python绘制多条曲线_java_04

我们可以恢复seaborn默认的画布


1 sns.set()  # 恢复默认的格式2 sinplot()
3


运行结果:

  

Python将多条重叠曲线合并成一条 python绘制多条曲线_Python将多条重叠曲线合并成一条_05

 

设置主题风格

这里有五种常用风格:darkgrid、whitegrid、dark、white、ticks


1 sns.set_style("whitegrid") 2 data = np.random.normal(size=(20, 6)) + np.arange(6) / 2
 3 sns.boxplot(data=data)
 4 plt.show()
 5 
 6 sns.set_style("dark")
 7 sinplot()
 8 plt.show()
 9 
10 sns.set_style("white")
11 sinplot()
12 plt.show()
13 
14 sns.set_style("ticks")
15 sinplot()
16 plt.show()
17 
18 sinplot()
19 sns.despine()
20

Python将多条重叠曲线合并成一条 python绘制多条曲线_Python将多条重叠曲线合并成一条_06

 

Python将多条重叠曲线合并成一条 python绘制多条曲线_Python将多条重叠曲线合并成一条_07

Python将多条重叠曲线合并成一条 python绘制多条曲线_python_08

 

Python将多条重叠曲线合并成一条 python绘制多条曲线_概率密度_09

Python将多条重叠曲线合并成一条 python绘制多条曲线_Python将多条重叠曲线合并成一条_10

 

 绘制小提琴图

   这种图表结合了箱形图和密度图的特征,主要用来显示数据的分布形状。中间的黑色粗条表示四分位数范围,

从其延伸的幼细黑线代表 95% 置信区间,而白点则为中位数。


1 data = np.random.normal(size=(20, 6)) + np.arange(6) / 22 # 小提琴图
3 sns.violinplot(data)
4 # offset=10 表示与轴线之间的距离;trim=True控制纵坐标方向的轴线
5 sns.despine(offset=10, trim=True)  # 轴线的距离
6 plt.show()
7 sns.violinplot(data)
8 sns.despine(offset=5, trim=False)  # 轴线的距离
9


运行结果:

  

Python将多条重叠曲线合并成一条 python绘制多条曲线_python_11

 

Python将多条重叠曲线合并成一条 python绘制多条曲线_概率密度_12

 

 绘制箱线图


1 sns.set_style("whitegrid")2 sns.boxplot(data=data, palette="deep")3 sns.despine(left=True)
4 plt.show()
5 
6 sns.set_style("whitegrid")
7 sns.boxplot(data=data)
8 sns.despine(left=True)
9

  

Python将多条重叠曲线合并成一条 python绘制多条曲线_数据_13

 

Python将多条重叠曲线合并成一条 python绘制多条曲线_Python将多条重叠曲线合并成一条_14

两张图很明显是图的颜色不一样,其实参数 palette="deep" 是表示调用 “deep” 的调色板。

 

 设置seaborn子图


1 def sinplot(flip=1): 2     x = np.linspace(0, 14, 100) 3     for i in range(1, 7): 4         plt.plot(x, np.sin(x + i * .5) * (7 - i) * flip)
 5 
 6 
 7 with sns.axes_style("darkgrid"):
 8     plt.subplot(211)
 9     sinplot()
10 plt.subplot(212)
11 sinplot(-1)
12


运行结果:

  

Python将多条重叠曲线合并成一条 python绘制多条曲线_数据_15

如果我们想绘制2X2的一个多个子图画布,我们可以使用  plt.subplot(2,2,i)  来指定。


1 sns.axes_style("darkgrid") 2 plt.subplot(221) 3 sinplot(1) 4 
 5 sns.axes_style("dark")
 6 plt.subplot(222)
 7 sinplot()
 8 
 9 sns.axes_style("ticks")
10 plt.subplot(223)
11 sinplot(-1)
12 
13 plt.subplot(224)
14 sns.set_context("notebook", font_scale=1.5, rc={"lines.linewidth": 2.5})
15 sinplot()
16


  运行结果:

  

Python将多条重叠曲线合并成一条 python绘制多条曲线_概率密度_16

set_context(context=None, font_scale=1, rc=None)  参数说明:context 有paper, notebook, talk, poster 这四个

预先设置的模板,font_scale为浮动参数,rc为参数映射字典,如:rc={"lines.linewidth": 2}。下面的案例将展示四种context

的效果。


1 plt.subplot(221) 2 sns.set_context("paper", font_scale=1.5) 3 sinplot(1) 4 
 5 
 6 plt.subplot(222)
 7 sns.set_context("notebook", rc={"lines.linewidth": .5})
 8 sinplot()
 9 
10 
11 plt.subplot(223)
12 sns.set_context("talk", font_scale=1.5, rc={"lines.linewidth": 2.})
13 sinplot(-1)
14 
15 plt.subplot(224)
16 sns.set_context("poster", font_scale=1.5, rc={"lines.linewidth": 2.5})
17 sinplot()
18

  运行结果:

  

Python将多条重叠曲线合并成一条 python绘制多条曲线_概率密度_17

 

Python将多条重叠曲线合并成一条 python绘制多条曲线_数据_18

  右图为除context其他参数一样的效果。context参数指定了风格,坐标轴对比明显。

 

 

调色板
  颜色很重要
  color_palette()能传入任何Matplotlib所支持的颜色;color_palette()不写参数则默认颜色
  set_palette()设置所有图的颜色

 分类色板 

获取当前使用的默认色板:


1 current_palette = sns.color_palette()2 # 获取当前调色板3 sns.palplot(current_palette)4


运行结果:

  

Python将多条重叠曲线合并成一条 python绘制多条曲线_概率密度_19

圆形画板
  当你有10个以上的分类要区分时,最简单的方法就是在一个圆形的颜色空间中画出均匀间隔的颜色(这样的色调会

保持亮度和饱和度不变)。这是大多数的人当他们需要使用比当前默认颜色循环中设置的颜色更多时的默认方案。

  最常用的方法是使用hls的颜色空间,这是RGB值的一个简单转换。


1 sns.palplot(sns.color_palette("hls", 12))2


运行结果:

  

Python将多条重叠曲线合并成一条 python绘制多条曲线_Python将多条重叠曲线合并成一条_20

下面用箱线图展示效果:


1 data = np.random.normal(size=(20, 12)) + np.arange(12) / 2
2 sns.boxplot(data=data, palette=sns.color_palette("hls", 12))
3 plt.show()


 运行结果:

  

Python将多条重叠曲线合并成一条 python绘制多条曲线_概率密度_21

  

hls_palette() 函数用下面的参数控制颜色的亮度和饱和

l - 亮度 lightness
  s - 饱和 saturation


1 sns.palplot(sns.color_palette("hls", 12))2 plt.show()3 sns.palplot(sns.hls_palette(12, l=.7, s=.9))4

  

Python将多条重叠曲线合并成一条 python绘制多条曲线_Python将多条重叠曲线合并成一条_22

  

Python将多条重叠曲线合并成一条 python绘制多条曲线_数据_23

 

 使用xkcd颜色来命名颜色

xkcd包含了一套众包努力的针对随机RGB色的命名。产生了954个可以随时通过xdcd_rgb字典中调用

的命名颜色。


1 plt.plot([0, 1], [0, 1], sns.xkcd_rgb["pale red"], lw=3)  # https://xkcd.com/color/rgb/2 plt.plot([0, 1], [0, 2], sns.xkcd_rgb["medium green"], lw=3)3 plt.plot([0, 1], [0, 3], sns.xkcd_rgb["denim blue"], lw=3)4 plt.plot([0, 1], [0, 4], sns.xkcd_rgb["olive"], lw=5)5


  运行结果:

  

Python将多条重叠曲线合并成一条 python绘制多条曲线_数据_24

  生成一个自定义调色板


1 colors = ["windows blue", "amber", "greyish", "faded green", "dusty purple"]2 sns.palplot(sns.xkcd_palette(colors))3


运行结果:

  

Python将多条重叠曲线合并成一条 python绘制多条曲线_Python将多条重叠曲线合并成一条_25

 连续色板

色彩随数据变换,比如数据越来越重要则颜色越来越深

  Accent, Accent_r, Blues, Blues_r, BrBG, BrBG_r, BuGn, BuGn_r, BuPu, BuPu_r, CMRmap, CMRmap_r, Dark2,

  Dark2_r, GnBu, GnBu_r, Greens, Greens_r, Greys, Greys_r, OrRd, OrRd_r, Oranges, Oranges_r, PRGn,

  PRGn_r, Paired, Paired_r, Pastel1, Pastel1_r, Pastel2, Pastel2_r, PiYG, PiYG_r, PuBu, PuBuGn, PuBuGn_r,

  PuBu_r, PuOr, PuOr_r, PuRd, PuRd_r, Purples, Purples_r, RdBu, RdBu_r, RdGy, RdGy_r, RdPu, RdPu_r,

  RdYlBu, RdYlBu_r, RdYlGn, RdYlGn_r, Reds, Reds_r, Set1, Set1_r, Set2, Set2_r, Set3, Set3_r, Spectral,

  Spectral_r, Vega10, Vega10_r, Vega20, Vega20_r, Vega20b, Vega20b_r, Vega20c, Vega20c_r, Wistia,

  Wistia_r, YlGn, YlGnBu, YlGnBu_r, YlGn_r,YlOrBr, YlOrBr_r, YlOrRd, YlOrRd_r, afmhot, afmhot_r, autumn,

  autumn_r,binary, binary_r, bone, bone_r, brg, brg_r, bwr, bwr_r, cool, cool_r, coolwarm,coolwarm_r,copper,

   copper_r,cubehelix, cubehelix_r, flag, flag_r, gist_earth, gist_earth_r, gist_gray, gist_gray_r, gist_heat,

  gist_heat_r, gist_ncar, gist_ncar_r, gist_rainbow, gist_rainbow_r, gist_stern, gist_stern_r, gist_yarg,

  gist_yarg_r, gnuplot,gnuplot2, gnuplot2_r, gnuplot_r, gray, gray_r, hot, hot_r, hsv, hsv_r, icefire, icefire_r,

  inferno, inferno_r, jet, jet_r, magma, magma_r, mako, mako_r, nipy_spectral, nipy_spectral_r, ocean,

  ocean_r, pink, pink_r, plasma, plasma_r, prism, prism_r, rainbow, rainbow_r, rocket, rocket_r, seismic,

  seismic_r, spectral, spectral_r, spring, spring_r, summer, summer_r, tab10, tab10_r, tab20, tab20_r,

   tab20b, tab20b_r, tab20c, tab20c_r, terrain, terrain_r, viridis, viridis_r, vlag, vlag_r, winter, winter_r

测试面板:


1 sns.palplot(sns.color_palette("Blues"))2 sns.palplot(sns.color_palette("Accent"))3

  

Python将多条重叠曲线合并成一条 python绘制多条曲线_概率密度_26

  

Python将多条重叠曲线合并成一条 python绘制多条曲线_数据_27

  注意:如果想要翻转渐变,可以在面板名称中添加一个_r后缀

 

 

cubehelix_palette()调色板
 色调线性变换


1 sns.palplot(sns.color_palette("cubehelix", 8))2 sns.palplot(sns.cubehelix_palette(8, start=.5, rot=-.75))3

  

Python将多条重叠曲线合并成一条 python绘制多条曲线_概率密度_28

  

Python将多条重叠曲线合并成一条 python绘制多条曲线_java_29

 

 light_palette() 和dark_palette()调用定制连续调色板


1 sns.palplot(sns.light_palette("green"))2 sns.palplot(sns.light_palette("navy", reverse=True))3 sns.palplot(sns.light_palette((210, 90, 60), input="husl"))4


运行结果:

  

Python将多条重叠曲线合并成一条 python绘制多条曲线_Python将多条重叠曲线合并成一条_30

  

Python将多条重叠曲线合并成一条 python绘制多条曲线_概率密度_31

  

Python将多条重叠曲线合并成一条 python绘制多条曲线_java_32