Python數據可視化庫seaborn ------ 繪制直方圖概率密度曲線;繪制多條曲線;設置主題風格;小提琴圖;箱線圖;繪制seaborn多個子圖;調色板;


繪制數據的直方圖及其概率密度曲線

  這里可以使用 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, integrate 5 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) / 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()

  運行結果:

   

 

 繪制箱線圖

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) / 2 2 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) # 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()

  運行結果:

  

  生成一個自定義調色板

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()

  運行結果:

  

  

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM