评论

收藏

[python] Python数据可视化库seaborn ------ 绘制直方图概率密度曲线;绘制多条曲线;设置主题风格;小提琴图;箱线图;绘制seaborn多个子图;调色板;

编程语言 编程语言 发布于:2021-06-24 10:23 | 阅读数:1033 | 评论:0

绘制数据的直方图及其概率密度曲线  这里可以使用 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()
  运行结果:   DSC0000.png    下面展示没有概率密度曲线的直方图和用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 plt.show()
  运行结果:
   DSC0001.png   DSC0002.png 在一个画布上绘制多条曲线
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()
  运行结果:   DSC0003.png   我们可以恢复seaborn默认的画布
1 sns.set()  # 恢复默认的格式
2 sinplot()
3 plt.show()
  运行结果:   DSC0004.png 设置主题风格  这里有五种常用风格: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()
DSC0005.png   DSC0006.png DSC0007.png   DSC0008.png DSC0009.png 绘制小提琴图  这种图表结合了箱形图和密度图的特征,主要用来显示数据的分布形状。中间的黑色粗条表示四分位数范围,
  从其延伸的幼细黑线代表 95% 置信区间,而白点则为中位数。
1 data = np.random.normal(size=(20, 6)) + np.arange(6) / 2
2 # 小提琴图
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()
  运行结果:   DSC00010.png   DSC00011.png  绘制箱线图
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()
   DSC00012.png   DSC00013.png   两张图很明显是图的颜色不一样,其实参数 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()
  运行结果:   DSC00014.png   如果我们想绘制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()
  运行结果:
   DSC00015.png   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()
  运行结果:
   DSC00016.png   DSC00017.png   右图为除context其他参数一样的效果。context参数指定了风格,坐标轴对比明显。调色板
  颜色很重要
  color_palette()能传入任何Matplotlib所支持的颜色;color_palette()不写参数则默认颜色
  set_palette()设置所有图的颜色  分类色板 
  获取当前使用的默认色板:
1 current_palette = sns.color_palette()
2 # 获取当前调色板
3 sns.palplot(current_palette)
4 plt.show()
  运行结果:   DSC00018.png  圆形画板
  当你有10个以上的分类要区分时,最简单的方法就是在一个圆形的颜色空间中画出均匀间隔的颜色(这样的色调会保持亮度和饱和度不变)。这是大多数的人当他们需要使用比当前默认颜色循环中设置的颜色更多时的默认方案。  最常用的方法是使用hls的颜色空间,这是RGB值的一个简单转换。
1 sns.palplot(sns.color_palette("hls", 12))
2 plt.show()
  运行结果:   DSC00019.png   下面用箱线图展示效果:
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()
  运行结果:   DSC00020.png  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()
   DSC00021.png    DSC00022.png  使用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 plt.show()
  运行结果:
   DSC00023.png   生成一个自定义调色板
1 colors = ["windows blue", "amber", "greyish", "faded green", "dusty purple"]
2 sns.palplot(sns.xkcd_palette(colors))
3 plt.show()
  运行结果: 
   DSC00024.png  连续色板  色彩随数据变换,比如数据越来越重要则颜色越来越深  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()
   DSC00025.png    DSC00026.png   注意:如果想要翻转渐变,可以在面板名称中添加一个_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()
   DSC00027.png    DSC00028.png  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()
  运行结果:   DSC00029.png    DSC00030.png    DSC00031.png  
关注下面的标签,发现更多相似文章