将 Seaborn 提供的样式声明代码 sns.set()
放置在绘图前,就可以设置图像的样式
sns.set(context='notebook', style='darkgrid', palette='deep', font='sans-serif', font_scale=1, color_codes=False, rc=None)
- context= 参数控制着默认的画幅大小,分别有 {paper, notebook, talk, poster} 四个值。其中,poster > talk > notebook > paper。
- style= 参数控制默认样式,分别有 {darkgrid, whitegrid, dark, white, ticks},你可以自行更改查看它们之间的不同。
- palette=参数为预设的调色板。分别有 {deep, muted, bright, pastel, dark, colorblind} 等,你可以自行更改查看它们之间的不同。
- 剩下的 font=用于设置字体,font_scale= 设置字体大小,color_codes= 不使用调色板而采用先前的 'r' 等色彩缩写。
seaborn图的分类
- 关联图
- replot (relational plots) 关系类图表的接口,其实是下面两种图的集成,通过指定kind参数可以画出下面的两种图
- 散点图scatterplot
- 线形图lineplot
- 类别图
- catplot 分类图表的接口,其实是下面八种图表的集成,通过指定kind参数可以画出下面的八种图
- 分类散点图
- stripplot() (kind="strip")
- swarmplot() (kind="swarm")
- 分类分布图
- boxplot() (kind="box")
- violinplot() (kind="violin")
- boxenplot() (kind="boxen")
- 分类估计图
- pointplot() (kind="point")
- barplot() (kind="bar")
- countplot() (kind="count")
- 分布图
- 单变量分布图
- 直方图,质量估计图 distplot()
- 核函数密度估计图kdeplot()
- 双变量关系图
- 双变量关系图jointplot()
- 变量关系组图pairplot()
- 将数组中的数据点绘制为轴上的数据rugplot()
- 单变量分布图
- 回归图
- 回归模型图Implot()
- 线性回归图regplot()
- 线性回归残差图residplot()
- 矩阵图组合图
- 热力图heatmap()
- 聚集图clustermap()
一.关联图
1.relplot 关系类图表的集成
它用散点图和线图两种常用的手段来表现统计关系。relplot()使用两个坐标轴级别的函数来结合了FacetGrid:
- scatterplot():(使用kind="scatter",这是默认参数)
- lineplot():(使用`kind="line")
seaborn.relplot(x=None, y=None, hue=None, size=None, style=None, data=None, row=None, col=None, col_wrap=None, row_order=None, col_order=None, palette=None, hue_order=None, hue_norm=None, sizes=None, size_order=None, size_norm=None, markers=None, dashes=None, style_order=None, legend='brief', kind='scatter', height=5, aspect=1, facet_kws=None, **kwargs)
- size一般接受连续数值型变量,但是我们也可以传入分类型变量。但是要慎重考虑这种做法,因为这样比“粗线 vs. 细线”的区分难多了。然而,当数据具有非常高频的变异性时,我们使用style表现的不同线条样式会很难区分,这时使用不同的线条宽度就是一个更高效的选择了
- 使用col(列)和row(行)参数来展示两个变量的影响。当我们在图中增加了更多的变量时(会有更多的子图),我们可能会想要调整图形的大小。要记住在FacetGrid中,我们用height(子图高度)和aspect(高宽比)来定制每个子图的大
- 详细介绍
- seaborn.relplot
2.scatterplot 散点图
显示观察数据的分布,描述数据的相关性
seaborn.scatterplot(x=None, y=None, hue=None, style=None, size=None, data=None, palette=None, hue_order=None, hue_norm=None, sizes=None, size_order=None, size_norm=None, markers=True, style_order=None, x_bins=None, y_bins=None, units=None, estimator=None, ci=95, n_boot=1000, alpha='auto', x_jitter=None, y_jitter=None, legend='brief', ax=None, **kwargs)
- x,y:输入的绘图数据,必须是数值型数据
- hue:对输入数据进行分组的序列,使用不同颜色对各组的数据加以区分
- size:对输入数据进行分组的序列,使用不同点尺寸对各组的数据加以区分
- style:对输入数据进行分组的序列,使用不同点标记对各组的数据加以区分
- data:pandas.DataFrame型参数,不能包含非数值型数据,否则会报错。使用该参数的好处为下列两种情况之一
- 第一种情况,快捷的绘制DataFrame内每一列的数据 sns.scatterplot(data=df)
- 第二种情况,输入绘图的x,y变量时,可以写简单一点 sns.scatterplot('a','b',data=df)
- palette:在对数据进行分组时,设置不同组数据的显示颜色。hue参数使用的是默认的颜色,如果需要更多的颜色选项,则需要通过调色盘来设置,可以使用seaborn.color_palette()函数来设置颜色
- hue_order:在使用hue参数对数据进行分组时,可以通过该参数设置数据组的显示顺序
- sizes:当使用size参数、以不同尺寸显示不同组数据时,可以通过sizes参数来设定具体的尺寸大小。该参数可以传入一个尺寸序列,也可以传入一个包含两个元素的元祖,分别制定尺寸的上下限。
- size_order:和hue_order参数作用一样,不过设置的是尺寸的显示顺序
- markers:当使用style参数、以不同的标记显示不同组数据时,可以通过该参数设置不同组数据的标记
- 详细介绍
- seaborn.scatterplot
3.lineplot 折线图
seaborn.lineplot(x=None, y=None, hue=None, size=None, style=None, data=None, palette=None, hue_order=None, hue_norm=None, sizes=None, size_order=None, size_norm=None, dashes=True, markers=None, style_order=None, units=None, estimator='mean', ci=95, n_boot=1000, sort=True, err_style='band', err_kws=None, legend='brief', ax=None, **kwargs)
举例:
#任务数变化 df_precision_change_tasknum = pd.read_excel('实验记录.xlsx', sheet_name='truth discovery(任务数变化)') sns.set(style='ticks') sns.set_context(rc={'lines.linewidth':5}) plt.xlim((19,300.5)) plt.ylim((0.8,1)) plt.xticks(np.arange(20, 301, 40)) plt.yticks([0.80,0.84,0.88,0.92,0.96]) palette = sns.diverging_palette(250, 199, l=40, n=4, center="dark") ax = sns.lineplot(x="tasknum", y="Precision",hue = 'algorithm', data=df_precision_change_tasknum, markers = False,palette = palette,style='algorithm') plt.xlabel('Number of tasks ($n=120$)', fontdict={'color': 'black', 'family': 'Times New Roman','size': 18}) plt.ylabel('precision', fontdict={'color': 'black', 'family': 'Times New Roman', 'size': 18}) plt.legend(['DATE','MV','ED','NC'],prop={'style': 'italic'})#图例 plt.grid(True) plt.tight_layout() #plt.savefig('local_pic/TD_precision_tasknum.jpg',dpi=600) plt.savefig('loc_svg/TD_precision_tasknum.svg') plt.show()