python绘制直方图显示数字_Python图表数据可视化Seaborn:1. 风格| 分布数据可视化-直方图| 密度图| 散点图...

本文详细介绍了Python的Seaborn库在数据可视化中的应用,特别是直方图、密度图和散点图的绘制。通过设置不同的风格,如`set()`, `set_style()`, `despine()`等,以及使用`color_palette()`来调整颜色。文中展示了如何使用`distplot()`、`kdeplot()`和`rugplot()`创建直方图和密度图,以及利用`jointplot()`和`pairplot()`绘制散点图,同时提供了各种参数设置和实例,帮助读者掌握Seaborn在分布数据可视化中的技巧。" 107704686,9383737,电影网站服务器配置实战,"['后端开发', '服务器', 'Web服务', '数据库', '网络安全']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

conda install seaborn 是安装到jupyter那个环境的

1. 整体风格设置

对图表整体颜色、比例等进行风格设置,包括颜色色板等

调用系统风格进行数据可视化

set() / set_style() / axes_style() / despine() / set_context()

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

import seaborn as sns

% matplotlib inline

#创建正弦函数及图表

defsinplot(flip = 1):

x = np.linspace(0, 14, 100)

for i in range(1, 7):

plt.plot(x, np.sin(x + i * 5) * (7 - i) * flip)

sinplot()

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy8xMjQ3MjIxLzIwMTgwOS8xMjQ3MjIxLTIwMTgwOTIzMjMyNzA2NTcwLTY0MTM1ODkzOS5wbmc=.jpg

1.1 set()

sns.set() #设置风格之后就会固定住,唯一办法就是刷新重新设置下

sinplot()

plt.grid(linestyle = '--')

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy8xMjQ3MjIxLzIwMTgwOS8xMjQ3MjIxLTIwMTgwOTIzMjMyNzUyOTU5LTEyNzE2MTE0OTYucG5n.jpg

1.2 set_style()

fig = plt.figure(figsize=(6,6))

ax1 = fig.add_subplot(2,1,1)

sns.set_style("whitegrid") sns.boxplot(data=data) 箱型图

# 2、set_style()

# 切换seaborn图表风格

# 风格选择包括:"white", "dark", "whitegrid", "darkgrid", "ticks"

fig = plt.figure(figsize=(6,6))

ax1 = fig.add_subplot(2,1,1)

sns.set_style("whitegrid")

data = np.random.normal(size=(20, 6)) + np.arange(6) / 2sns.boxplot(data=data)

plt.title('style - whitegrid')

# 仍然可以使用matplotlib的参数

ax2 = fig.add_subplot(2,1,2)

#sns.set_style("dark")

sinplot()

# 子图显示

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy8xMjQ3MjIxLzIwMTgwOS8xMjQ3MjIxLTIwMTgwOTIzMjMyODQyMjQ1LTExNjQ0NDgxMTcucG5n.jpg

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy8xMjQ3MjIxLzIwMTgwOS8xMjQ3MjIxLTIwMTgwOTIzMjMyODU4NTU4LTIxMDIzMDQyNTMucG5n.jpg

1.3 despine()

sns.despine()会删除上、右坐标轴; sns.despine(offset=10, trim=True) sns.despine(left=True, right = False) #left=True是左边不显示;right=False是显示

fig = plt.figure(figsize=(6,9)) plt.subplots_adjust(hspace=0.3) #创建图表 -->> ax1 = fig.add_subplot(3,1,1)

sns.violinplot(data=data) 小提琴状sns.boxplot(data=data, palette="deep")

# 3、despine()

# 设置图表坐标轴

# seaborn.despine(fig=None, ax=None, top=True, right=True, left=False,

# bottom=False, offset=None, trim=False)

sns.set_style("ticks")

# 设置风格

fig = plt.figure(figsize=(6,9))

plt.subplots_adjust(hspace=0.3)

# 创建图表

ax1 = fig.add_subplot(3,1,1)

sinplot()

sns.despine()

# 删除了上、右坐标轴

ax2 = fig.add_subplot(3,1,2)

sns.violinplot(data=data) #小提琴图

# sns.despine(offset=10, trim=True) #offset坐标轴会偏移10; trim=False是坐标轴没有限制

# offset:与坐标轴之间的偏移

# trim:为True时,将坐标轴限制在数据最大最小值

ax3 = fig.add_subplot(3,1,3)

sns.boxplot(data=data, palette="deep")

sns.despine(left=True, right = False) #left=True是左边不显示;right=False是显示

# top, right, left, bottom:布尔型,为True时不显示

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy8xMjQ3MjIxLzIwMTgwOS8xMjQ3MjIxLTIwMTgwOTIzMjMyOTQxMDgzLTE3ODkyMDcxMDAucG5n.jpg

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy8xMjQ3MjIxLzIwMTgwOS8xMjQ3MjIxLTIwMTgwOTIzMjMyOTU5ODYzLTE3NTYzMTg0ODMucG5n.jpg

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy8xMjQ3MjIxLzIwMTgwOS8xMjQ3MjIxLTIwMTgwOTIzMjMzMDIwNjE2LTE1ODg0NjUwNTAucG5n.jpg

1.4 axes_style()

with sns.axes_style("darkgrid"):

plt.subplot(211)

sinplot()

# 4、axes_style() 设置局部图表风格,可学习和with配合的用法

with sns.axes_style("darkgrid"): #只在sns这个图表,这个代码块里边设置风格,外边的风格还是whitegrid

plt.subplot(211)

sinplot()

# 设置局部图表风格,用with做代码块区分

sns.set_style("whitegrid")

plt.subplot(212)

sinplot()

# 外部表格风格

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy8xMjQ3MjIxLzIwMTgwOS8xMjQ3MjIxLTIwMTgwOTIzMjMzMTI4NTUzLTUxNDE1MzUzMC5wbmc=.jpg

1.5 set_context()

sns.set_context("paper") ; 因为你在不同屏幕中看到的不一样这里就可以设置

# 5、set_context()

# 设置显示比例尺度

# 选择包括:'paper', 'notebook', 'talk', 'poster'

sns.set_context("paper")

sinplot()

# 默认为notebook

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy8xMjQ3MjIxLzIwMTgwOS8xMjQ3MjIxLTIwMTgwOTIzMjMzMjE0MDUwLTc2NTc5MjkzNy5wbmc=.jpg

2. 调色盘

对图表整体颜色、比例等进行风格设置,包括颜色色板等

调用系统风格进行数据可视化

color_palette()

2.1 color_palette()

sns.color_palette()

#默认6种颜色:deep, muted, pastel, bright, dark, colorblind

# 1、color_palette()

# 默认6种颜色:deep, muted, pastel, bright, dark, colorblind

# seaborn.color_palette(palette=None, n_colors=None, desat=None)

current_palette =sns.color_palette()

sns.palplot(current_palette)

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy8xMjQ3MjIxLzIwMTgwOS8xMjQ3MjIxLTIwMTgwOTIzMjMzMjUzMjE3LTE0OTY3NDYwODAucG5n.jpg

# 一、其他颜色风格

# 风格内容: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, 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, terrain, terrain_r, viridis, viridis_r, vlag, vlag_r, winter, winter_r

sns.palplot(sns.color_palette("inferno_r", 8)) #inferno 和 inferno_r 颜色反转了哦

# 这里颜色风格为 hls

# 颜色色块个数为8个

#风格颜色反转(不是所有颜色都可以反转):Blues/Blues_r

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy8xMjQ3MjIxLzIwMTgwOS8xMjQ3MjIxLTIwMTgwOTIzMjMzMzIyNDEwLTE4MjAzMTE3OTMucG5n.jpg

#分组颜色设置 - “Paired”

sns.palplot(sns.color_palette("Paired", 10)) #color_palette默认颜色

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy8xMjQ3MjIxLzIwMTgwOS8xMjQ3MjIxLTIwMTgwOTIzMjMzMzQ5MTg3LTE0NTMzMTM2MjkucG5n.jpg

2.2 sns.hls_palette(l= ,s= ) 亮度、饱和度

sns.palplot(sns.hls_palette(8, l=.3, s=.9)) #l--> 亮度;s--> 饱和度

# 2、设置亮度,饱和度 可用方法:

# ① husl_palette([n_colors, h, s, l])

# ②hls_palette([n_colors, h, l, s])

sns.palplot(sns.hls_palette(8, l=.3, s=.9)) #l--> 亮度;s--> 饱和度

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy8xMjQ3MjIxLzIwMTgwOS8xMjQ3MjIxLTIwMTgwOTIzMjMzNDE1MDc2LTE5MTgyODEyMjAucG5n.jpg

2.3 cubehelix_palette()按线性增长计算,设置颜色

sns.palplot(sns.cubehelix_palette(8, start=2, rot=0, dark=0, light=.95, reverse=True))

# 3、cubehelix_palette()

# 按照线性增长计算,设置颜色

sns.palplot(sns.cubehelix_palette(8, gamma=2)) #gamma值越大越暗

sns.palplot(sns.cubehelix_palette(8, start=.5, rot=-.75)) #8个色带,从1.2颜色开始算,rot是旋转角度;start、rot起始终止颜色

sns.palplot(sns.cubehelix_palette(8, start=2, rot=0, dark=0, light=.95, reverse=True))

# n_colors → 颜色个数

# start → 值区间在0-3,开始颜色

# rot → 颜色旋转角度

# gamma → 颜色伽马值,越大颜色越暗

# dark,light → 值区间0-1,颜色深浅

# reverse → 布尔值,默认为False,由浅到深

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy8xMjQ3MjIxLzIwMTgwOS8xMjQ3MjIxLTIwMTgwOTIzMjMzNDQ0NjcwLTExMDY3NDI2NTcucG5n.jpg

2.4 dark_palette() light_palette()颜色深浅

sns.palplot(sns.light_palette("green"))

sns.palplot(sns.dark_palette("red", reverse=True))

#4、dark_palette(color[, n_colors, reverse, ...]) / light_palette(color[, n_colors, reverse, ...])

# 颜色深浅

sns.palplot(sns.light_palette("green")) # 按照green做浅色调色盘

#sns.palplot(sns.color_palette("Greens")) # cmap为Greens风格

sns.palplot(sns.dark_palette("red", reverse=True)) # 按照blue做深色调色盘

# reverse → 转制颜色

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy8xMjQ3MjIxLzIwMTgwOS8xMjQ3MjIxLTIwMTgwOTIzMjMzNTExNzEwLTUxNzUwMTE5Ni5wbmc=.jpg

2.5 diverging_palette()创建分散颜色

sns.palplot(sns.diverging_palette(145, 280, s=85, l=25, n=7)) 起始值、终止值、s为饱和度、l为亮度、n为个数

cmap = sns.diverging_palette(200, 20, sep=20, as_cmap=True) #调色盘

sns.heatmap(x, cmap=cmap)#创建热力图它就显示成热力图的效果了

# 5、diverging_palette() 创建分散颜色

# seaborn.diverging_palette(h_neg, h_pos, s=75, l=50, sep=10, n=6,

# center='light', as_cmap=False)¶

sns.palplot(sns.diverging_palette(145, 280, s=85, l=25, n=7)) #第一个起始值和末尾颜色值,s和l是饱和度、亮度,n个数

# h_neg, h_pos → 起始/终止颜色值

# s → 值区间0-100,饱和度

# l → 值区间0-100,亮度

# n → 颜色个数

# center → 中心颜色为浅色还是深色“light”,“dark”,默认为light

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy8xMjQ3MjIxLzIwMTgwOS8xMjQ3MjIxLTIwMTgwOTIzMjMzNTM5MTUxLTE4Njg0NjE5MzgucG5n.jpg

# 5、diverging_palette() 创建分散颜色

plt.figure(figsize = (8,6))

x = np.arange(25).reshape(5, 5) #二维的组

cmap = sns.diverging_palette(200, 20, sep=20, as_cmap=True) #调色盘

sns.heatmap(x, cmap=cmap)#创建热力图它就显示成热力图的效果了

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy8xMjQ3MjIxLzIwMTgwOS8xMjQ3MjIxLTIwMTgwOTIzMjMzNjQ1MzE4LTY5MzY2MTU5Ny5wbmc=.jpg

# 设置调色板后,绘图创建图表

sns.set_style("whitegrid")

# 设置风格

with sns.color_palette("PuBuGn_d"): #设置调色盘

plt.subplot(211)

sinplot()

sns.set_palette("husl") #或者这样

plt.subplot(212)

sinplot()

# 绘制系列颜色

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy8xMjQ3MjIxLzIwMTgwOS8xMjQ3MjIxLTIwMTgwOTI0MDgyMzU0MjMwLTE5OTQzMTUxNTUucG5n.jpg

3. 分布数据可视化 - 直方图与密度图

distplot() / kdeplot() / rugplot()

3.1直方图distplot( )

sns.distplot(s,bins = 10,hist = True,kde = False,norm_hist=False,

rug = True,vertical = False,

color = 'y',label = 'distplot',axlabel = 'x')

颜色设置:sns.distplot(s,rug = True,

rug_kws = {'color':'g'} ,

kde_kws={"color": "k", "lw": 1, "label": "KDE",'linestyle':'--'},

hist_kws={"histtype": "step", "linewidth": 1,"alpha": 1, "color": "g"})

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

import seaborn as sns

% matplotlib inline

sns.set_style("darkgrid")

sns.set_context("paper")

# 设置风格、尺度

import warnings

warnings.filterwarnings('ignore')

# 不发出警告

rs = np.random.RandomState(10) # 设定随机数种子

s = pd.Series(rs.randn(100) * 100)

sns.distplot(s,bins = 10,hist = True,kde = False,norm_hist=False,

rug = True,vertical = False,

color = 'y',label = 'distplot',axlabel = 'x')

plt.legend()

# bins → 箱数

# hist、ked → 是否显示箱数/显示密度曲线

# norm_hist → 直方图是否按照密度来显示

# rug → 是否显示数据分布情况

# vertical → 是否水平显示

# color → 设置颜色

# label → 图例

# axlabel → x轴标注

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy8xMjQ3MjIxLzIwMTgwOS8xMjQ3MjIxLTIwMTgwOTI1MjE0MjE3MDc5LTQ1MjM0OTY1My5wbmc=.jpg

# 1、直方图 - distplot()

# 颜色详细设置

sns.distplot(s,rug = True,

rug_kws = {'color':'g'} ,

# 设置数据频率分布颜色

kde_kws={"color": "k", "lw": 1, "label": "KDE",'linestyle':'--'},

# 设置密度曲线颜色,线宽,标注、线形

hist_kws={"histtype": "step", "linewidth": 1,"alpha": 1, "color": "g"})

# 设置箱子的风格、线宽、透明度、颜色

# 风格包括:'bar', 'barstacked', 'step', 'stepfilled'

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy8xMjQ3MjIxLzIwMTgwOS8xMjQ3MjIxLTIwMTgwOTI1MjE0OTU3MjM5LTY1ODk5NjI0MS5wbmc=.jpg

3.2密度图sns.kdeplot( ) sns.rugplot( )

单个样本:sns.kdeplot(s,

shade = False, # 是否填充

color = 'r', # 设置颜色

vertical = False # 设置是否水平

)

sns.kdeplot(s,bw=5, label="bw: 0.2",

linestyle = '-',linewidth = 1.2,alpha = 0.5)

sns.rugplot(s,height = 0.1,color = 'k',alpha = 0.5)数据频率分布

多个样本:

sns.kdeplot(df['A'],df['B'],cbar = True, shade = True, cmap = 'Reds', shade_lowest=False,n_levels = 10 )两个维度数据生成曲线密度图,以颜色作为密度衰减

plt.grid(linestyle = '--')

plt.scatter(df['A'], df['B'], s=5, alpha = 0.5, color = 'k') #散点

sns.rugplot(df['A'], color="g", axis='x',alpha = 0.5)

sns.rugplot(df['B'], color="r", axis='y',alpha = 0.5)

# 2、密度图 - kdeplot()

# 单个样本数据密度分布图

sns.kdeplot(s,

shade = False, # 是否填充

color = 'r', # 设置颜色

vertical = False # 设置是否水平

)

sns.kdeplot(s,bw=5, label="bw: 0.2",

linestyle = '-',linewidth = 1.2,alpha = 0.5)

sns.kdeplot(s,bw=20, label="bw: 2",

linestyle = '-',linewidth = 1.2,alpha = 0.5)

# bw → 控制拟合的程度,类似直方图的箱数,设置的数量越大越平滑,越小越容易过度拟合

sns.rugplot(s,height = 0.1,color = 'k',alpha = 0.5)

# 数据频率分布图

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy8xMjQ3MjIxLzIwMTgwOS8xMjQ3MjIxLTIwMTgwOTI1MjE1MDU1NDcyLTg1MDI3NTk5MS5wbmc=.jpg

# 2、密度图 - kdeplot()

# 两个样本数据密度分布图

rs = np.random.RandomState(2) # 设定随机数种子

df = pd.DataFrame(rs.randn(100,2),

columns = ['A','B'])

sns.kdeplot(df['A'],df['B'], #两个样本的数据密度图

cbar = True, # 是否显示颜色图例

shade = True, # 是否填充

cmap = 'Reds', # 设置调色盘

shade_lowest=False, # 最外围颜色是否显示

n_levels = 10 # 曲线个数(如果非常多,则会越平滑)

)

# 两个维度数据生成曲线密度图,以颜色作为密度衰减显示

plt.grid(linestyle = '--')

plt.scatter(df['A'], df['B'], s=5, alpha = 0.5, color = 'k') #散点

sns.rugplot(df['A'], color="g", axis='x',alpha = 0.5)

sns.rugplot(df['B'], color="r", axis='y',alpha = 0.5)

# 注意设置x,y轴

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy8xMjQ3MjIxLzIwMTgwOS8xMjQ3MjIxLTIwMTgwOTI1MjE1MTQ1OTQ1LTMwNTkzMzA2NS5wbmc=.jpg

# 2、密度图 - kdeplot()

# 两个样本数据密度分布图

# 多个密度图

rs1 = np.random.RandomState(2)

rs2 = np.random.RandomState(5)

df1 = pd.DataFrame(rs1.randn(100,2)+2,columns = ['A','B'])

df2 = pd.DataFrame(rs2.randn(100,2)-2,columns = ['A','B'])

# 创建数据

sns.kdeplot(df1['A'],df1['B'],cmap = 'Greens',

shade = True,shade_lowest=False)

sns.kdeplot(df2['A'],df2['B'],cmap = 'Blues',

shade = True,shade_lowest=False)

# 创建图表

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy8xMjQ3MjIxLzIwMTgwOS8xMjQ3MjIxLTIwMTgwOTI1MjE1MjU1Mzk3LTEwMDg4ODA2ODkucG5n.jpg

4. 分布数据可视化 - 散点图

分布数据可视化 - 散点图

jointplot( ) / pairplot( )

综合和矩阵散点图

散点图+分布图(直方)sns.jointplot(x=df['A'], y=df['B'], data=df,color = 'k',s = 50, edgecolor="w",linewidth=1,kind ='scatter',space = 0.2, size = 5,

ratio = 4, marginal_kws=dict(bins=15, rug=True))

散点图+分布图(直方),点为六边形 sns.jointplot(x=df['A'], y=df['B'],data = df, kind="hex", color="k",

marginal_kws=dict(bins=20))

散点图+分布图(密度)g = sns.jointplot(x=df['A'], y=df['B'],data = df,

kind="kde", color="k",

shade_lowest=False)

g.plot_joint(plt.scatter,c="w", s=30, linewidth=1, marker="+") 在密度图上添加散点图

综合散点图(可拆分) plot_joint() + ax_marg_x.hist() + ax_marg_y.hist()

g = sns.JointGrid(x="total_bill", y="tip", data=tips)

g.plot_joint(plt.scatter, color ='m', edgecolor = 'white') # 设置框内图表,scatter,首先设置个内部的点图

g.ax_marg_x.hist(tips["total_bill"], color="b", alpha=.6,bins=np.arange(0, 60, 3))# 设置x轴直方图,注意bins是数组

g.ax_marg_y.hist(tips["tip"], color="r", alpha=.6,orientation="horizontal",bins=np.arange(0, 12, 1))

# plot_joint() + plot_marginals()

g = sns.JointGrid(x="total_bill", y="tip", data=tips)

g = g.plot_joint(sns.kdeplot,cmap = 'Reds_r') g.plot_marginals(sns.distplot, kde=True,color="g")

g.plot_marginals(sns.kdeplot, shade = True, color="r")

3.1综合散点图

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

import seaborn as sns

% matplotlib inline

sns.set_style("whitegrid")

sns.set_context("paper")

# 设置风格、尺度

import warnings

warnings.filterwarnings('ignore')

# 不发出警告

# 1、综合散点图 - jointplot()

# 散点图 + 分布图

rs = np.random.RandomState(2)

df = pd.DataFrame(rs.randn(200,2),columns = ['A','B'])

# 创建数据

sns.jointplot(x=df['A'], y=df['B'], # 设置xy轴,显示columns名称

data=df, # 设置数据

color = 'k', # 设置颜色

s = 50, edgecolor="w",linewidth=1, # 设置散点大小、边缘线颜色及宽度(只针对scatter)

kind = 'scatter', # 设置类型:“scatter”、“reg”、“resid”、“kde”、“hex”

space = 0.2, # 设置散点图和布局图的间距

size = 5, # 图表大小(自动调整为正方形)

ratio = 4, # 散点图与布局图高度比,整型

marginal_kws=dict(bins=15, rug=True) # 设置柱状图箱数,是否设置rug

)

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy8xMjQ3MjIxLzIwMTgwOS8xMjQ3MjIxLTIwMTgwOTI2MDY1NDA1MzU3LTEwMTMxNTkyOTIucG5n.jpg

# 1、综合散点图 - jointplot()

# 散点图 + 分布图

# 六边形图

df = pd.DataFrame(rs.randn(500,2),columns = ['A','B'])

# 创建数据

with sns.axes_style("white"):

sns.jointplot(x=df['A'], y=df['B'],data = df, kind="hex", color="k",

marginal_kws=dict(bins=20))

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy8xMjQ3MjIxLzIwMTgwOS8xMjQ3MjIxLTIwMTgwOTI2MDY1NDU3MzA4LTEyMjM2NzQ4NzcucG5n.jpg

# 1、综合散点图 - jointplot()

# 散点图 + 分布图

# 密度图

rs = np.random.RandomState(15)

df = pd.DataFrame(rs.randn(300,2),columns = ['A','B'])

# 创建数据

g = sns.jointplot(x=df['A'], y=df['B'],data = df,

kind="kde", color="k",

shade_lowest=False) #是否对外围做面积的覆盖

# 创建密度图

g.plot_joint(plt.scatter,c="w", s=30, linewidth=1, marker="+")

# 添加散点图

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy8xMjQ3MjIxLzIwMTgwOS8xMjQ3MjIxLTIwMTgwOTI2MDY1NTM5NzM4LTIwODg5Njk0MzgucG5n.jpg

# 1、综合散点图 - JointGrid()

# 可拆分绘制的散点图

# plot_joint() + ax_marg_x.hist() + ax_marg_y.hist()

sns.set_style("white")

# 设置风格

tips = sns.load_dataset("tips")

print(tips.head())

# 导入数据

g = sns.JointGrid(x="total_bill", y="tip", data=tips)

# 创建一个绘图表格区域,设置好x、y对应数据

g.plot_joint(plt.scatter, color ='m', edgecolor = 'white') # 设置框内图表,scatter,首先设置个内部的点图

g.ax_marg_x.hist(tips["total_bill"], color="b", alpha=.6,

bins=np.arange(0, 60, 3)) # 设置x轴直方图,注意bins是数组

g.ax_marg_y.hist(tips["tip"], color="r", alpha=.6,

orientation="horizontal",

bins=np.arange(0, 12, 1)) # 设置x轴直方图,注意需要orientation参数

from scipy import stats

g.annotate(stats.pearsonr)

# 设置标注,可以为pearsonr,spearmanr

plt.grid(linestyle = '--')

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy8xMjQ3MjIxLzIwMTgwOS8xMjQ3MjIxLTIwMTgwOTI2MDY1NjQzOTc4LTE3Mzg1NDYxNC5wbmc=.jpg

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy8xMjQ3MjIxLzIwMTgwOS8xMjQ3MjIxLTIwMTgwOTI2MDY1NzE2MjI1LTEwODQxNzExMTgucG5n.jpg

# 1、综合散点图 - JointGrid()

# 可拆分绘制的散点图

# plot_joint() + plot_marginals()

g = sns.JointGrid(x="total_bill", y="tip", data=tips)

# 创建一个绘图表格区域,设置好x、y对应数据

g = g.plot_joint(plt.scatter,color="g", s=40, edgecolor="white") # 绘制散点图

plt.grid(linestyle = '--')

g.plot_marginals(sns.distplot, kde=True, color="g") # 绘制x,y轴直方图

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy8xMjQ3MjIxLzIwMTgwOS8xMjQ3MjIxLTIwMTgwOTI2MDY1ODAxODQ0LTc1MTc3ODk3OC5wbmc=.jpg

# 1、综合散点图 - JointGrid()

# 可拆分绘制的散点图

# plot_joint() + plot_marginals()

# kde - 密度图

g = sns.JointGrid(x="total_bill", y="tip", data=tips)

# 创建一个绘图表格区域,设置好x、y对应数据

g = g.plot_joint(sns.kdeplot,cmap = 'Reds_r') # 绘制密度图

plt.grid(linestyle = '--')

g.plot_marginals(sns.kdeplot, shade = True, color="r") # 绘制x,y轴密度图

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy8xMjQ3MjIxLzIwMTgwOS8xMjQ3MjIxLTIwMTgwOTI2MDY1ODQyMDAyLTU0NTYwNjkxMS5wbmc=.jpg

3.2矩阵散点图

# 2、矩阵散点图 - pairplot()

sns.set_style("white")

# 设置风格

iris = sns.load_dataset("iris")

print(iris.head())

# 读取数据

sns.pairplot(iris,

kind = 'scatter', # 散点图/回归分布图 {‘scatter’, ‘reg’}

diag_kind="hist", # 直方图/密度图 {‘hist’, ‘kde’}

hue="species", # 按照某一字段进行分类

palette="husl", # 设置调色板

markers=["o", "s", "D"], # 设置不同系列的点样式(这里根据参考分类个数)

size = 1, # 图表大小

)

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy8xMjQ3MjIxLzIwMTgwOS8xMjQ3MjIxLTIwMTgwOTI2MDY1OTIzMDg5LTE4NzQzNDkyNDEucG5n.jpg

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy8xMjQ3MjIxLzIwMTgwOS8xMjQ3MjIxLTIwMTgwOTI2MDY1OTQ4Nzg3LTIwODU5NDg5LnBuZw==.jpg

# 2、矩阵散点图 - pairplot()

# 只提取局部变量进行对比

sns.pairplot(iris,vars=["sepal_width", "sepal_length"],

kind = 'reg', diag_kind="kde",

hue="species", palette="husl")

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy8xMjQ3MjIxLzIwMTgwOS8xMjQ3MjIxLTIwMTgwOTI2MDcwMTIwMjQ4LTExNTUyNzQ4MDgucG5n.jpg

# 2、矩阵散点图 - pairplot()

# 其他参数设置

sns.pairplot(iris, diag_kind="kde", markers="+",

plot_kws=dict(s=50, edgecolor="b", linewidth=1),

# 设置点样式

diag_kws=dict(shade=True)

# 设置密度图样式

)

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy8xMjQ3MjIxLzIwMTgwOS8xMjQ3MjIxLTIwMTgwOTI2MDcwMjEwNzI3LTEyMDc2OTU5NDIucG5n.jpg

# 2、矩阵散点图 - PairGrid()

# 可拆分绘制的散点图

# map_diag() + map_offdiag()

g = sns.PairGrid(iris,hue="species",palette = 'hls',

vars = ['sepal_length','sepal_width','petal_length','petal_width'], # 可筛选

)

# 创建一个绘图表格区域,设置好x、y对应数据,按照species分类

g.map_diag(plt.hist,

histtype = 'barstacked', # 可选:'bar', 'barstacked', 'step', 'stepfilled'

linewidth = 1, edgecolor = 'w')

# 对角线图表,plt.hist/sns.kdeplot

g.map_offdiag(plt.scatter,

edgecolor="w", s=40,linewidth = 1, # 设置点颜色、大小、描边宽度

)

# 其他图表,plt.scatter/plt.bar...

g.add_legend()

# 添加图例

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy8xMjQ3MjIxLzIwMTgwOS8xMjQ3MjIxLTIwMTgwOTI2MDcwMjQzNjY2LTMxMTYyNDUzNC5wbmc=.jpg

# 2、矩阵散点图 - PairGrid()

# 可拆分绘制的散点图

# map_diag() + map_lower() + map_upper()

g = sns.PairGrid(iris)

g.map_diag(sns.kdeplot, lw=3) # 设置对角线图表

g.map_upper(plt.scatter, color = 'r') # 设置对角线上端图表

g.map_lower(sns.kdeplot, cmap="Blues_d") # 设置对角线下端图表

L3Byb3h5L2h0dHBzL2ltZzIwMTguY25ibG9ncy5jb20vYmxvZy8xMjQ3MjIxLzIwMTgwOS8xMjQ3MjIxLTIwMTgwOTI2MDcwMzA3NDg3LTIwMTQyNTUzNjUucG5n.jpg

seaborn分布数据可视化:直方图|密度图|散点图

系统自带的数据表格(存放在github上https://github.com/mwaskom/seaborn-data),使用时通过sns.load_dataset('表名称')即可,结果为一个Dat ...

Python图表数据可视化Seaborn:3. 线性关系数据| 时间线图表| 热图

1. 线性关系数据可视化 lmplot( ) import numpy as np import pandas as pd import matplotlib.pyplot as plt import ...

seaborn 数据可视化(一)连续型变量可视化

一.综述 Seaborn其实是在matplotlib的基础上进行了更高级的API封装,从而使得作图更加容易,图像也更加美观,本文基于seaborn官方API还有自己的一些理解.   1.1.样式控制: ...

python学习笔记(2):科学计算及数据可视化入门

一.NumPy 1.NumPy:Numberical Python 2.高性能科学计算和数据分析的基础包 3.ndarray,多维数组(矩阵),具有矢量运算的能力,快速.节省空间 (1)ndarray ...

seaborn教程4——分类数据可视化

https://segmentfault.com/a/1190000015310299 Seaborn学习大纲 seaborn的学习内容主要包含以下几个部分: 风格管理 绘图风格设置 颜色风格设置 绘 ...

用Python的Plotly画出炫酷的数据可视化(含各类图介绍,附代码)

前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 我被狗咬了 在谈及数据可视化的时候,我们通常都会使用到matplo ...

数据可视化 seaborn绘图(1)

seaborn是基于matplotlib的数据可视化库.提供更高层的抽象接口.绘图效果也更好. 用seaborn探索数据分布 绘制单变量分布 绘制二变量分布 成对的数据关系可视化 绘制单变量分布 se ...

性能测试 基于Python结合InfluxDB及Grafana图表实时采集Linux多主机性能数据

基于Python结合InfluxDB及Grafana图表实时采集Linux多主机性能数据   by:授客 QQ:1033553122 实现功能 测试环境 环境搭建 使用前提 使用方法 运行程序 效果展 ...

随机推荐

Entity Framework 6 Recipes 2nd Edition(13-2)译 -> 用实体键获取一个单独的实体

问题 不管你用DBFirst,ModelFirst或是CodeFirst的方式,你想用实体键获取一个单独的实体.在本例中,我们用CodeFirst的方式. 解决方案 假设你有一个模型表示一个Paint ...

浅谈cssText

给一个HTML元素设置css属性,如 var head= document.getElementById("head"); head.style.width = "200 ...

Centos6版本升级

1.查看当前版本 [root@IDC-D-1699 docker]# cat /etc/issue CentOS release 6.8 (Final) Kernel \r on an \m 2.升级 ...

Iframe 自适应高度的方法!

第一种方法:代码简单,兼容性还可以,大家可以先测试下. function SetWinHeight(obj) { var win=obj; if (document.getElementById) { ...

弹性ScrollView,和下啦刷新的效果类似 实现下拉弹回和上拉弹回

今天做了一个弹性ScrollView,和下啦刷新的效果类似,我想这个很多需求都用的这种效果 其实这是一个自定义的scrollView,上代码,这是我写在一个公共的组件包里的 package com.p ...

BZOJ 2423 最长公共子序列

Description 字符序列的子序列是指从给定字符序列中随意地(不一定连续)去掉若干个字符(可能一个也不去掉)后所形成的字符序列.令给定的字符序列X=“x0,x1,…,xm-1”,序列Y=“y0, ...

hdu 4634 Swipe Bo bfs+状态压缩

题目链接 状态压缩记录当前拿到了哪些钥匙, 然后暴力搜索. 搞了好几个小时, 一开始也不知道哪里错了, 最后A了也不知道一开始哪里有问题. #include #inc ...

使用Prism提供的类实现WPF MVVM点餐Demo

使用Prism提供的类实现WPF MVVM点餐Demo 由于公司开发的技术需求,近期在学习MVVM模式开发WPF应用程序.进过一段时间的学习,感受到:学习MVVM模式,最好的方法就是用MVVM做几个D ...

python数据结构之队列

队列(queue)是只允许在一端进行插入操作,而在另一端进行删除操作的线性表. 队列是一种先进先出的(First In First Out)的线性表,简称FIFO.允许插入的一端为队尾,允许删除的一端 ...

<think>好的,用户想在Python中用matplotlib和seaborn生成二维直方图。首先,我需要回忆这两个库的相关函数。对于matplotlib,我记得有hist2d方法,可以用来绘制二维直方图。而seaborn可能有更简洁的接口,比如使用histplot并指定两个变量,或者jointplot结合直方图。 接下来,我需要考虑用户可能的代码示例。对于matplotlib,首先需要导入库,生成示例数据,比如使用numpy的随机数。然后使用plt.hist2d,设置分箱数量、颜色映射等参数。添加颜色条、标题、标签等元素,最后显示图形。 对于seaborn部分,可能需要使用histplot,设置x和y参数,以及bin的数量。此外,seaborn的jointplot也可以展示两个变量的分布,结合散点图直方图。需要展示这两种方法的不同应用场景,比如数据分布查看或相关性分析。 还要注意用户提到的引用,确保引用的正确性。例如,引用[1]提到matplotlib的散点图示例,引用[3]提到seaborn的箱线图。虽然这些不是直方图,但需要正确关联到相关库的使用方法。 需要验证代码的正确性,比如确保数据维度正确,函数参数无误。同时,提醒用户调整分箱数、颜色映射等参数来优化可视化效果。可能还需要提及如何处理大数据集,比如使用hexbin或者调整分箱数避免过密。 最后,生成相关问题,考虑二维直方图的应用场景、调整方法、与散点图的区别,以及处理大数据的方法。这些问题要帮助用户进一步理解和应用所学内容。</think>在Python中,使用matplotlib和seaborn实现二维直方图主要有以下两种方法: ### 一、使用matplotlib绘制二维直方图 ```python import matplotlib.pyplot as plt import numpy as np # 生成示例数据(二维正态分布) x = np.random.normal(0, 1, 10000) y = np.random.normal(0, 1, 10000) # 创建二维直方图 plt.figure(figsize=(8,6)) hist = plt.hist2d(x, y, bins=40, cmap='viridis') # 添加颜色条 plt.colorbar(hist[3], label='频数') # 设置标题和坐标轴 plt.title('二维直方图(Matplotlib实现)') plt.xlabel('X值') plt.ylabel('Y值') plt.grid(alpha=0.3) plt.show() ``` 该代码生成一个二维正态分布直方图,使用$bins=40$指定分箱数量,$cmap='viridis'$控制颜色映射[^1]。 ### 二、使用seaborn绘制二维直方图 ```python import seaborn as sns import pandas as pd # 创建DataFrame df = pd.DataFrame({'X': x, 'Y': y}) # 方法1:histplot plt.figure(figsize=(8,6)) sns.histplot(data=df, x='X', y='Y', bins=40, cmap='mako') plt.title('二维直方图Seaborn histplot)') plt.grid(alpha=0.3) # 方法2:jointplot sns.jointplot(data=df, x='X', y='Y', kind='hist', bins=40, cmap='rocket') plt.suptitle('联合分布图(Seaborn jointplot)') plt.tight_layout() ``` seaborn的$histplot$提供更简洁的语法,而$jointplot$可以同时展示边缘分布和联合分布[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值