博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python数据可视化库seaborn ------ 绘制直方图概率密度曲线;绘制多条曲线;设置主题风格;小提琴图;箱线图;绘制seaborn多个子图;调色板;...
阅读量:5351 次
发布时间:2019-06-15

本文共 6734 字,大约阅读时间需要 22 分钟。

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

  这里可以使用 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 plt.show()

  运行结果:

  

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

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

  运行结果:

   

 

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

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 plt.show()

  运行结果:

  

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

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

  运行结果:

  

 

设置主题风格

   这里有五种常用风格: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 plt.show()

 

 

 

 绘制小提琴图

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

从其延伸的幼细黑线代表 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 plt.show()

  运行结果:

   

 

 绘制箱线图

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 plt.show()

   

  两张图很明显是图的颜色不一样,其实参数 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 plt.show()

  运行结果:

  

  如果我们想绘制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 plt.show()

  运行结果:

  

  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 plt.show()

  运行结果:

   

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

 

 

调色板

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

 分类色板 

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

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

  运行结果:

  

 圆形画板

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

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

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

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

  运行结果:

  

  下面用箱线图展示效果:

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

  运行结果:

  

  

 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 plt.show()

  

  

 

 使用xkcd颜色来命名颜色

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

的命名颜色。

1 plt.plot([0, 1], [0, 1], sns.xkcd_rgb["pale red"], lw=3)  #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 plt.show()

  运行结果:

  

  生成一个自定义调色板

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

  运行结果: 

  

 连续色板

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

  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 plt.show()

  

  

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

 

 

cubehelix_palette()调色板

 色调线性变换

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

  

  

 

 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 plt.show()

  运行结果:

  

  

  

 

转载于:https://www.cnblogs.com/dan-baishucaizi/p/9467064.html

你可能感兴趣的文章
【FZSZ2017暑假提高组Day9】猜数游戏(number)
查看>>
泛型子类_属性类型_重写方法类型
查看>>
对闭包的理解
查看>>
练习10-1 使用递归函数计算1到n之和(10 分
查看>>
Oracle MySQL yaSSL 不明细节缓冲区溢出漏洞2
查看>>
Code Snippet
查看>>
zoj 1232 Adventure of Super Mario
查看>>
组合数学 UVa 11538 Chess Queen
查看>>
oracle job
查看>>
Redis常用命令
查看>>
[转载]电脑小绝技
查看>>
windos系统定时执行批处理文件(bat文件)
查看>>
thinkphp如何实现伪静态
查看>>
BZOJ 2243: [SDOI2011]染色( 树链剖分 )
查看>>
BZOJ 1925: [Sdoi2010]地精部落( dp )
查看>>
c++中的string常用函数用法总结!
查看>>
[DLX精确覆盖+打表] hdu 2518 Dominoes
查看>>
SuperMap iServerJava 6R扩展领域开发及压力测试---判断点在那个面内(1)
查看>>
Week03-面向对象入门
查看>>
一个控制台程序,模拟机器人对话
查看>>