Seaborn 可视化学习

news2024/11/18 20:17:26

Abstract

主要讲述绘制强化学习结果时遇到的seaborn操作。因此,本文主要讲述Lineplot的用法,以及图片的相关设置

线条绘制

import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np


# 单线绘制
data = pd.DataFrame({ "timestep":np.arange(100), "sr": np.arange(100)/100+0.1*np.random.randn(100)})
sns.lineplot(x="timestep",y="sr",data=data)
plt.show()

# 含有方差的单线绘制
data1 = np.arange(100)/100+0.1*np.random.randn(100)
data2 = np.arange(100)/100+0.1*np.random.randn(100)
data3 = np.arange(100)/100+0.1*np.random.randn(100)

data = pd.DataFrame({ "timestep":np.concatenate([np.arange(100) for i in range(3)],-1), 
                     "sr": np.concatenate([data1,data2,data3])})
sns.lineplot(x="timestep",y="sr",data=data)
plt.show()

在这里插入图片描述也就是说, 对于lineplot的输出,都是一维的向量。 对于多次的结果,我们需要将他们扁平化为一维数据,然后将数据的timesteps标注好。

import seaborn as sns
sns.lineplot(x,  # 横轴的标签, RL中一般为 timesteps, episodes, epochs
					  y,  # 纵轴的标签
					  data, # DataFrame object, 从此处调用数据
					  style, # 相同style标签的线 会有相同的颜色和线形表示
					  ci, # 表示是否设置方差  None, "sd" 和 默认的置信区间
					  hue, # 通过hue 可以设置多条线,并且设置legend
					  )

更具体的lineplot用法可以参照数据可视化(3)-Seaborn系列 | 折线图lineplot()

数据提取

因为seaborn.lineplot (也就是relplot(kind=“line”)) 仅支持pandas.DataFrame类型,因此,在对含有方差的线条,以及多条含有方差的线条进行绘制之前,需要将数据配置进DataFrame中。此处参考了使用seaborn绘制强化学习中的图片。

此处重点讲述 如何在一个图中画出多条线来

import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np


return1 = np.array([(np.arange(100)/100+0.1*np.random.randn(100)).clip(0,1) for i in range(3)])
return2 = np.array([ (1- np.exp(-np.arange(100)/100)+0.1*np.random.randn(100)).clip(0,1) for i in range(3)])

data = [return1,return2]
label = ["algo1","algo2"]

df = []

# ------------------- 重点 ----------------------------------
for i in range(2):
    # 此处 melt是将 (3,100)的结果压缩成 (300,)的结果,同时index标签是episodes, value的标签设置为 return
    df_elem = pd.DataFrame(data[i]).melt(var_name="episodes",value_name="return")
    # 将数据添加一行标签,都设置为 algoi
    df_elem["algo"]=label[i]
    df.append(df_elem)
    
# 将 list中的DF 合并成一个df, 之后df 有 episodes, return, algo 三个属性
# episodes用于区分第i episode,表示步长
# return表示值
# algo表示数据的类别,用于分成几条线,也用于区分线的类型
df = pd.concat(df)
# ------------------- 重点 ----------------------------------

# df.head()
sns.lineplot(x="episodes",y="return",data=df,
             hue="algo", # 用于将数据分成几条线
             style="algo", #用于表示数据的线形和颜色
             marker=False, # 可以设置中心点是否显示
            )
plt.show()


在这里插入图片描述

图片细节配置

前两部分保证可以正确的画出想要的曲线,该部分总结如何设置图像细节。

图形风格控制 分为两部分, 一部分是背景控制,另一方面是样式控制。

# 在jupyter notebook中需要在最开始设置 : 
sns.set()

# 1. 背景控制
# context = paper, talk, poster, notebook
#设置字体大小,边线
# rc = {"lines.linewidth": 2.5}
sns.set_context(context=None, font_scale=1, rc=None)

# 2. 样式控制
sns.set_style(style)
# style =  darkgrid,whitegrid,dark,white,ticks

# 默认样式
sns.axes_style()

{'axes.axisbelow': True,
 'axes.edgecolor': 'white',
 'axes.facecolor': '#EAEAF2',
 'axes.grid': True,
 'axes.labelcolor': '.15',
 'axes.linewidth': 0.0,
 'figure.facecolor': 'white',
 'font.family': ['sans-serif'],
 'font.sans-serif': ['Arial',
  'Liberation Sans',
  'Bitstream Vera Sans',
  'sans-serif'],
 'grid.color': 'white',
 'grid.linestyle': '-',
 'image.cmap': 'Greys',
 'legend.frameon': False,
 'legend.numpoints': 1,
 'legend.scatterpoints': 1,
 'lines.solid_capstyle': 'round',
 'text.color': '.15',
 'xtick.color': '.15',
 'xtick.direction': 'out',
 'xtick.major.size': 0.0,
 'xtick.minor.size': 0.0,
 'ytick.color': '.15',
 'ytick.direction': 'out',
 'ytick.major.size': 0.0,
 'ytick.minor.size': 0.0}

# 设置样式

sns.set_style({"axes.facecolor": ".9"})

sns.despine() 


# 4. 颜色设置
# 可以通过 color_palette(RGB) 或者 hls_palette(HLS) 设置颜色
sns.palplot(sns.hls_palette(n_colors=8)) 
# 具体见下一节

# 设置图片大小
plt.figure(dpi=300, figsize=(6, 4))

# 设置标签 
plt.xlabel("x label")
ax.set_ylabel('Y Label',fontsize=15, color='r')
# 设置刻度
plt.xticks( rotation=60)  # rotation: degree 
ax.tick_params(axis='y',labelsize=8)

plt.title()  # 用于设置标题

# legend 设置
legend = ax.legend()   # ax 从 lineplot获取
legend.texts[0].set_text("Whatever else")   # 设置图例的名字

## 移除图例的标题
handles, labels = ax.get_legend_handles_labels()
ax.legend(handles=handles[1:], labels=labels[1:])

## 移除图例
sns.lineplot(legend=False)
plt.legend(labels=[] , loc="upper right", bbox_to_anchor = (1,1), ncol=1)
 # 自己设置图例 , bbox_to_anchor 可以将图例放在图外


# 保存图片
plt.savefig(name, dpi=400, bbox_inches='tight')

颜色设置

参考文章
数据可视化Seaborn从零开始学习教程(二) 颜色调控篇
Seaborn(sns)官方文档学习笔记(第二章 斑驳陆离的调色板)

创建调色板

sns.color_palette() # 接受seaborn, matplotlib中的颜色名称, 也接受RGB,HEX颜色代码
sns.set_palette() # 用于设置调色板 

调色板分为 分类色板, 连续色板, 离散色板。
对于没有相关性的数据,我们一般就使用分类色板。

# 当前色板
current_palette = sns.color_palette()
sns.palplot(current_palette)

在这里插入图片描述"bright"效果更鲜艳:

在这里插入图片描述


# 有六种主题
# themes = ['deep', 'muted', 'pastel', 'bright', 'dark', 'colorblind']
sns.color_palette(every_theme) # 都可以查看结果

创建新的调色板

当需要的颜色超过想要的,或者想要修改亮度,饱和度

sns.palplot(sns.hls_palette(8, l=0.3,s=0.8))
sns.palplot(sns.color_palette("husl",8))

另外,也可以从Color Brewer中调用颜色表 (循环的颜色表)

sns.palplot(sns.color_palette("Paired"))

在这里插入图片描述


sns.palplot(sns.color_palette("Set2", 10))

在这里插入图片描述

交互

在jupyter notebook中可以进行交互

sns.choose_colorbrewer_palette("qualitative")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/541730.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

接口测试全流程扫盲,让我看看有哪些漏网之鱼

目录 扫盲内容: 1.什么是接口? 2.接口都有哪些类型? 3.接口的本质及其工作原理是什么? 4.什么是接口测试? 5.问什么要做接口测试? 6.怎样做接口测试? 7.接口测测试点是什么?…

蓝桥杯2020年第十一届省赛真题-回文日期python两种方法题解(贪心+datetime)

题目 原题链接:回文日期 - 蓝桥云课 (lanqiao.cn) 题目描述 2020 年春节期间,有一个特殊的日期引起了大家的注意:2020 年 2 月 2 日。因为如果将这个日期按 “yyyymmdd” 的格式写成一个 8 位数是 20200202,恰好是一个回文数。…

如何系统自学黑客(网络安全)?

前言: 黑客技能是一项非常复杂和专业的技能,需要广泛的计算机知识和网络安全知识。下面是一些你可以参考和学习的步骤,以系统自学黑客(网络安全): 在学习之前,要给自己定一个目标或者思考一下…

SpringBoot日志配置(四十七)

当一切被遗忘,那么就回到最初的地方 上一章简单介绍了SpringBoot配置文件敏感信息加密(四十六) , 如果没有看过,请观看上一章 这一章节,我们学习一下日志配置. 参考文章: Spring Boot 日志配置(超详细) 一. 日志配置处理 我们创建一个普通的 SpringB…

docker-compose 实现Seata Server高可用部署 | Spring Cloud 51

一、前言 Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。 TC (Transaction Coordinator) - 事务协调者 维护全局和分支事…

excel根据不同分类动态设置不同下拉列列表

有这样一个需求,有很多个系统,需要在excel中下拉选择其系统一级分类、二级分类、三级分类,不同的一级分类对应不同的二级分类列表,不同的二级分类对应不同的三级分类列表。 针对这个需求,我们采用了excel/wps中的数据…

数据结构总结7:并查集、图

后续会有补充 并查集 查你在哪个集合,在有一定交集情况下会合并集合 可应用的场景: 1.分组 2.已有集合合并 并查集就是把一组数据分组,把有共同特征的元素以树的形式放在一组 仔细观察数组中内融化,可以得出以下结论&#x…

【数据结构和算法】数据结构基础和算法思想

文章目录 1. 基础的一些数据结构(1)数组(2)链表(3)二叉树(4)哈希表 2. 有哪些常见的算法思想?3. 常见排序算法及其复杂度 1. 基础的一些数据结构 (1&#xf…

java多线程之定时器

文章目录 一、 简介1. 概念2. 定时器的使用 二、 常用方法介绍1. Schedule(TimTask task,Data time)2. Schedule(TimTask task,Data firstTime, long period)3. Schedule(TimTask task, long delay)4. Schedule(TimTask task, long delay, lo…

数据结构_排序

目录 1. 排序的基本概念 2. 插入排序 2.1 直接插入排序 2.2 折半插入排序 2.3 希尔排序 2.4 相关练习 3. 交换排序 3.1 冒泡排序 3.2 快速排序 3.3 相关练习 4. 选择排序 4.1 简单选择序列 4.2 堆排序 4.3 相关练习 5. 归并排序和基数排序 5.1 归并排序 5.2 基…

这几款实用的电脑软件推荐给你

软件一:TeamViewer TeamViewer是一款跨平台的远程控制软件,它可以帮助用户远程访问和控制其他计算机、服务器、移动设备等,并且支持文件传输、会议功能等。 TeamViewer的主要功能包括: 远程控制:支持远程访问和控制…

【Jenkins】Jenkins运行python脚本的简单操作(windows)

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化 👉专__注👈:专注主流机器人、人工智能等相关领域的开发、…

Vue基础入门(中)

组件的定义 组件具备复用性 注意&#xff1a;全局组件&#xff0c;只要定义了&#xff0c;处处可以使用&#xff0c;性能不高&#xff0c;但是使用起来简单 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><me…

Linux下的用户分类与su/sudo 命令,Linux下的文件类型/用户文件权限身份/文件权限属性/权限与文件权限/ls-l文件属性详解

Tips 下载就是把我们的文件拷贝到系统的某个特定路径之下&#xff0c;普通用户是不允许你往系统里面去拷的。 Linux下的用户分类 root用户&#xff0c;管理员级别的用户身份&#xff0c;他的话基本上不受权限的约束。普通用户&#xff0c;普通用户的添加与每个普通用户密码的…

《面试1v1》JavaNIO

我是 javapub&#xff0c;一名 Markdown 程序员从&#x1f468;‍&#x1f4bb;&#xff0c;八股文种子选手。 面试官&#xff1a; 你好&#xff0c;我想问一下你对 Java NIO 的了解。 候选人&#xff1a; 当然&#xff0c;Java NIO 是 Java 的一种 I/O 模型&#xff0c;它提…

MapReduce【自定义分区Partitioner】

实际开发中我们可能根据需求需要将MapReduce的运行结果生成多个不同的文件&#xff0c;比如上一个案例【MapReduce计算广州2022年每月最高温度】&#xff0c;我们需要将前半年和后半年的数据分开写到两个文件中。 默认分区 默认MapReduce只能写出一个文件&#xff1a; 因为我…

「OceanBase 4.1 体验」OceanBase:解读领先的分布式数据库系统,功能与体验全解析

文章目录 前言一、关于 【OceanBase 4.1】征文活动&#xff08;可跳过&#xff09;二、OceanBase 产品了解2.1 初识 OceanBase2.2 什么是 OceanBase2.3 OceanBase 相关链接2.4 OceanBase 与传统数据库对比有何特别之处2.5 OceanBase 相关概念以及术语2.5.1 OceanBase 基本概念2…

接口测试总结及其用例设计方法整理,希望可以帮到你

目录 接口测试的总结文档 第一部分&#xff1a; 第二部分&#xff1a; 接口测试用例设计 接口测试的总结文档 第一部分&#xff1a;主要从问题出发&#xff0c;引入接口测试的相关内容并与前端测试进行简单对比&#xff0c;总结两者之前的区别与联系。但该部分只交代了怎么做…

ios中video标签兼容问题

案例 这是在实际开发中遇到的问题,产品给出的效果图如下: 其实就是一个h5页面中有很多视频, 但是我为什么都画着预览图呢? 因为在ios中video标签中尽管有src属性, 但是在没有预览图的情况下, 是一个灰蒙蒙的图层的, 很丑, 效果如下: 看到这里是不是很崩溃, 在PC端, 在安卓端…

RK3568平台开发系列讲解(Camera篇)快速了解RK Camera的使用

🚀返回专栏总目录 文章目录 一、MIPI CSI1.1 Full Mode特点1.2 Split Mode特点二、Full Mode配置2.1 配置sensor端2.2 csi2_dphy0相关配置2.3 isp相关配置三、Split Mode配置3.1 配置sensor端3.2 csi2_dphy1/csi2_dphy2相关配置3.3 isp相关配置四、软件相关目录