seaborn的调色板、刻度、边框、标签、数据集等的一些解释

文章介绍了如何使用seaborn库进行数据可视化,包括设置整体风格、调整颜色、设置x轴刻度和标签、以及使用lineplot函数创建图表。seaborn是对matplotlib的封装,提供了更简洁的接口来创建好看的数据图。文章还展示了如何处理中文标签和自定义颜色。
摘要由CSDN通过智能技术生成

前言

seaborn是对matplotlib进一步封装的库,可以用更少的代码,画出更好看的图。
官网:https://seaborn.pydata.org/index.html
下面记录一下seaborn的基础用法

数据集构建

data.csv

y,x,label
0.8247232472324724,1,Acc
0.8468634686346863,2,Acc
0.8376383763837638,3,Acc
0.8321033210332104,4,Acc
0.8210332103321033,5,Acc
0.8228782287822878,6,Acc
0.6507456180817264,1,F1
0.7309871925648871,2,F1
0.7194538226979977,3,F1
0.6778786218741208,4,F1
0.6738158306986812,5,F1
0.6660476551670024,6,F1

建议使用dataframe,因为这样列名和列值一一对应,看起来也比较清爽。
这里x表示横坐标,y表示纵坐标,label是用于区分曲线标签。
数据保存为data.csv文件,使用pandas读入:

import pandas as pd
data = pd.read_csv("data.csv")

整体风格设置

import seaborn as sns
sns.set_style("darkgrid") 
sns.set_theme(style="ticks") # 设置刻度
sns.despine() # 去掉上面和右边的轴
sns.set_theme(style="white")
sns.set_context("notebook", font_scale=0.7, rc={"lines.linewidth":1.2}) # 设置label字体大小、线条粗细等

风格就是指的他给我们配好的颜色,直接用就行,如果不喜欢他的配色,可以使用调色板来修改颜色。

调色板

palette = sns.hls_palette(2, l=0.7, s=0.8) # 个数、亮度、饱和度
palette = sns.color_palette("Set2", n_colors=2, desat=1)
palette = sns.xkcd_palette(["sky blue", "periwinkle"])

调色板有很多,还有连续调色`等,但是大多是给我调好,不能修改的。
不过

palette = sns.xkcd_palette(["sky blue", "periwinkle"])

这个调色板可以自定义需要的颜色,就是用起来比较麻烦,需要自己写出颜色的名称传进去,这没办法,自定义就是会配起来麻烦些。
配色可以查阅:https://xkcd.com/color/rgb/
应该是有几百种颜色。

x轴的刻度值设置

其实当指导seaborn是基于matplotlib的时候,就可以知道怎么来调整刻度了。

import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(5,2),dpi=150)
ax.set_xticks([i+1 for i in range(16)])
plt.xticks(rotation = 0)

这样就能将x轴的刻度都设置为整数了。

调整x轴label字体大小

import matplotlib.pyplot as plt
import seaborn as sns
plt.rcParams['font.sans-serif'] = ['Simhei']   #用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False    #用来正常显示负号
ax = sns.barplot(x="feature_name",y="importance",data=imp_draw)
ax.set_xticklabels(ax.get_xticklabels(), rotation=90, fontsize=80)

使用中文


sns.set(font="SimHei")

sns.lineplot实例

import pandas as pd
data = pd.read_csv("data.csv")

import seaborn as sns
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(5,2),dpi=150)
sns.despine() # 去掉上面和右边的轴
sns.set_context("notebook", font_scale=0.7, rc={"lines.linewidth":1.2}) # 设置label大小
plt.xticks(rotation = 0)
ax.set_xticks([i+1 for i in range(16)])
palette = sns.xkcd_palette(["sky blue", "periwinkle"])


bwith = 1  # 边框宽度设置为
TK = plt.gca()  # 获取边框
TK.spines['bottom'].set_linewidth(bwith)  # 图框下边
TK.spines['left'].set_linewidth(bwith)  # 图框左边

sns.lineplot(
x="x", # x列名
y="y", # y列名
style="label", # 样式分组(label1类名)
hue="label", # 颜色分组(label2列名)
data=data, 
markers=True, 
palette=palette
)

输出:
在这里插入图片描述
我们可以看到,两条曲线的形状不同、颜色也不同。
x、y分别作为x轴的标签、y轴的标签
label作为图例的标签。
上、右的边框隐藏了。
颜色也是自己挑选的颜色。
整体看上去还是不错的。

不过如果我不想要label这个词出现在图例上呢?
目前还没找到什么正当的解决方法,不过我试出了这么个法子:

import pandas as pd
data = pd.read_csv("data.csv")
col = data.columns[:-1].to_list()
col.append("")
data.columns = col
import seaborn as sns
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(5,2),dpi=150)
sns.despine() # 去掉上面和右边的轴
sns.set_context("notebook", font_scale=0.7, rc={"lines.linewidth":1.2}) # 设置label大小
plt.xticks(rotation = 0)
ax.set_xticks([i+1 for i in range(16)])
palette = sns.xkcd_palette(["sky blue", "periwinkle"])


bwith = 1  # 边框宽度设置为
TK = plt.gca()  # 获取边框
TK.spines['bottom'].set_linewidth(bwith)  # 图框下边
TK.spines['left'].set_linewidth(bwith)  # 图框左边

sns.lineplot(
x="x", # x列名
y="y", # y列名
style="", # 样式分组(label1类名)
hue="", # 颜色分组(label2列名)
data=data, 
markers=True, 
palette=palette
)

就是将dataframe的列名改为""
这样运行结果如下:
在这里插入图片描述
可以了,差不多有模有样了。

=======================================================
发现还有操作空间:

import pandas as pd
data = pd.read_csv("data.csv")
col = data.columns[:-1].to_list()
col.append("")
data.columns = col

import seaborn as sns
import matplotlib.pyplot as plt
fig, ax = plt.subplots(figsize=(5,2),dpi=150)
sns.despine() # 去掉上面和右边的轴
sns.set_theme(style="ticks")
sns.set_context("paper", font_scale=0.7, rc={"lines.linewidth":1.2}) # 设置label大小

ax.set_xticks([i+1 for i in range(16)])
palette = sns.xkcd_palette(["sky blue", "orange"])
plt.xticks(rotation = 0)
p = sns.pointplot(x="x", y="y",hue="",style="", data=data, markers=["o", "*"], linestyles=["-", "--"], palette=palette)
# 图上标注数值
for index,row in data.iterrows():
        plt.text(x=row["x"]-1,y=round(row["y"],3)+0.01, s=round(row["y"],2), color="black",ha="center")
plt.savefig('fig.pdf', dpi=400, bbox_inches='tight')

输出:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Icy Hunter

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值