matplotlib 强化学习

  1. import matplotlib.pyplot as plt
  2. ...![](https://img2020.cnblogs.com/blog/1642028/202006/1642028-20200621111043462-144482637.png)
  3. plt.show() #显示图像;下面都要写,就不重复了

二维图表

1. 基本图表

  1. 用plot方法画出x=(0,10)间sin的图像
  1. x = np.linspace(0, 10, 30) #产生0-10之间的30个均匀数组
  2. plt.plot(x, np.sin(x)); #以x为横坐标,sin(x)为纵坐标打印出图像

注:

  • linspace生成的是包含结尾的数组,比如0-10生成11个数才是0,1,2,3,4,5...
  • 生成10个数则是0,1.11111111, 2.22222222, 3.33333333, 4.44444444...;
  • 而arrange是不包含结尾的,0-10生成10个数是0,1,2,3...
  1. 用点,线的方式画出x=(0,10)间sin的图像
  1. plt.plot(x, np.sin(x), '-o');
  2. #'o’代表每个数据点用小圆圈表示,且数据点之前不用线连接,看起来很像散点图
  3. #'ro'代表小圆圈是红色的
  4. #'-'就是最普通的线型,数据点之间用实线连接。
  5. #'--'设置线性为虚线

!

  1. 用scatter方法画出x=(0,10)间sin的点图像
  1. plt.scatter(x, np.sin(x)); #散点图

  1. 用饼图的面积及颜色展示一组4维数据
  1. rng = np.random.RandomState(0)
  2. x = rng.randn(100) #生成随机数组
  3. y = rng.randn(100)
  4. colors = rng.rand(100)
  5. sizes = 1000 * rng.rand(100)
  6. plt.scatter(x, y, c=colors, s=sizes, alpha=0.3,
  7. cmap='viridis')
  8. plt.colorbar(); # 展示色阶

绘制柱状图

  1. x = [1,2,3,4,5,6,7,8]
  2. y = [3,1,4,5,8,9,7,2]
  3. label=['A','B','C','D','E','F','G','H']
  4. plt.bar(x,y,tick_label = label); #纵向升高
  5. plt.barh(x,y,tick_label = label); #换成横向

直方图

  1. data = np.random.randn(1000) #生成1000个随机数
  2. plt.hist(data); #画出图像

!

2. 自定义图表元素

  1. x = np.linspace(0,10,100)
  2. plt.plot(x, np.sin(x))
  3. plt.ylim(-1.5, 1.5); #设置y轴显示范围为(-1.5,1.5)
  1. x = np.linspace(0.05, 10, 100)
  2. y = np.sin(x)
  3. plt.plot(x, y, label='sin(x)')
  4. plt.xlabel('variable x'); #设置x,y轴标签variable x,value y
  5. plt.ylabel('value y');
  6. plt.title('三角函数'); #设置图表标题“三角函数”
  7. plt.text(3.2, 0, 'sin(x)', weight='bold', color='r'); #注释
  8. plt.annotate('maximum',xy=(np.pi/2, 1),xytext=(np.pi/2+1, 1),weight='bold',color='r',arrowprops=dict(arrowstyle='->', connectionstyle='arc3', color='r')); #箭头标识

显示网格

  1. x = np.linspace(0.05, 10, 100)
  2. y = np.sin(x)
  3. plt.plot(x, y)
  4. plt.grid()
  5. ...
  6. 参数
  7. matplotlin.pyplot.grid(b, which, axis, color, linestyle, linewidth **kwargs) axis : 取值为‘both’, x’,‘y’。就是想绘制哪个方向的网格线。不过我在输入参数的时候发现如果输入xy的时候, 输入的是哪条轴,则会隐藏哪条轴
  8. color : 这就不用多说了,就是设置网格线的颜色。或者直接用c来代替color也可以。
  9. plt.grid(c='g') 设置颜色为绿色
  10. linestyle :也可以用ls来代替linestyle 设置网格线的风格,是连续实线,虚线或者其它不同的线条。 | '-' | '--' | '-.' | ':' | 'None' | ' ' | '']
  11. plt.grid(linestyle='-.')
  12. linewidth : 设置网格线的宽度
  13. ...

绘制平行于x轴y=0.8的水平参考线

  1. x = np.linspace(0.05, 10, 100)
  2. y = np.sin(x)
  3. plt.plot(x, y)
  4. plt.axhline(y=0.8, ls='--', c='r')#水平参考线

3. 自定义图像

在一张图里绘制sin,cos的图形,并展示图例

  1. x = np.linspace(0, 10, 1000)
  2. fig, ax = plt.subplots()
  3. ax.plot(x, np.sin(x), label='sin')
  4. ax.plot(x, np.cos(x), '--', label='cos')
  5. ax.legend();

多子图

在2个子图中,显示sin(x)和cos(x)的图像

  1. fig = plt.figure()
  2. ax1 = fig.add_axes([0.1, 0.5, 0.8, 0.4], ylim=(-1.2, 1.2))
  3. ax2 = fig.add_axes([0.1, 0.1, 0.8, 0.4], ylim=(-1.2, 1.2))
  4. x = np.linspace(0, 10)
  5. ax1.plot(np.sin(x));
  6. ax2.plot(np.cos(x));

  1. for i in range(1, 7): #用for创建6个子图,并且在图中标识出对应的子图坐标
  2. plt.subplot(2, 3, i)
  3. plt.text(0.5, 0.5, str((2, 3, i)),fontsize=18, ha='center')

组合绘制大小不同的子图

  1. grid = plt.GridSpec(2, 3, wspace=0.4, hspace=0.3)
  2. plt.subplot(grid[0, 0])
  3. plt.subplot(grid[0, 1:])
  4. plt.subplot(grid[1, :2])
  5. plt.subplot(grid[1, 2]);

三维图像

  1. #38.创建一个三维画布
  2. from mpl_toolkits import mplot3d
  3. fig = plt.figure()
  4. ax = plt.axes(projection='3d')
  5. #39.绘制一个三维螺旋线
  6. ax = plt.axes(projection='3d')
  7. # Data for a three-dimensional line
  8. zline = np.linspace(0, 15, 1000)
  9. xline = np.sin(zline)
  10. yline = np.cos(zline)
  11. ax.plot3D(xline, yline, zline);
  12. #40.绘制一组三维点
  13. ax = plt.axes(projection='3d')
  14. zdata = 15 * np.random.random(100)
  15. xdata = np.sin(zdata) + 0.1 * np.random.randn(100)
  16. ydata = np.cos(zdata) + 0.1 * np.random.randn(100)
  17. ax.scatter3D(xdata, ydata, zdata, c=zdata, cmap='Greens');



  1. import numpy as np
  2. from matplotlib import pyplot as plt
  3. from mpl_toolkits.mplot3d import Axes3D
  4. q1 = np.arange(0.01, 1, 0.01)
  5. q2 = np.arange(0.01, 1 , 0.01) #生成一位基底
  6. q1, q2 = np.meshgrid(q1, q2) #混合成二维数组,形成二维基底
  7. pCDa = (1-q1)
  8. pCDb = (np.sqrt((1-q1)**2+q1**2)-q1)
  9. s_pCD = -q1* np.log2(q1) - (1-q1) * np.log2(1-q1)
  10. Q_MID1 = s_pCD *q2 /q2 #AB或CD的关联值,下图是(s_x_pCD - s_pCD) *q2; *q2/q2后才是圆柱体
  11. fig = plt.figure()
  12. ax = Axes3D(fig)
  13. ax.plot_surface(q1,q2,Q_MID1) #表面图
  14. ax.set_xlabel('value of q2')
  15. ax.set_ylabel('value of q1')
  16. ax.set_zlabel('the value of Q_MID1(pCD)')
  17. plt.show()
  18. #参数
  19. ax.plot_surface(X, Y, Z, *args, **kwargs)
  20. X,Y,Z:数据
  21. rstridecstridercountccount:同Wireframe plots定义
  22. color:表面颜色
  23. cmap:图层

参考文献:

  1. https://www.kesci.com/home/project/5de9f0a0953ca8002c95d2a9 50题matplotlib从入门到精通

  2. https://www.cnblogs.com/knightoffz/p/12933716.html 大创项目经历

  3. https://matplotlib.org/mpl_toolkits/mplot3d/tutorial.html 官方文档

  4. https://www.cnblogs.com/xingshansi/p/6777945.html 参考博客

matplotlib 强化学习的更多相关文章

  1. 【转载】 强化学习(六)时序差分在线控制算法SARSA

    原文地址: https://www.cnblogs.com/pinard/p/9614290.html ------------------------------------------------ ...

  2. 爬格子问题(经典强化学习问题) Sarsa 与 Q-Learning 的区别

    SARSA v.s. Q-learning 爬格子问题,是典型的经典强化学习问题. 动作是上下左右的走,每走一步就会有一个-1的奖赏.从初始状态走到最终的状态,要走最短的路才能使奖赏最大.图中有一个悬 ...

  3. 强化学习之Q-learning简介

    https://blog.csdn.net/Young_Gy/article/details/73485518 强化学习在alphago中大放异彩,本文将简要介绍强化学习的一种q-learning.先 ...

  4. 强化学习之四:基于策略的Agents (Policy-based Agents)

    本文是对Arthur Juliani在Medium平台发布的强化学习系列教程的个人中文翻译,该翻译是基于个人分享知识的目的进行的,欢迎交流!(This article is my personal t ...

  5. 强化学习之二:Q-Learning原理及表与神经网络的实现(Q-Learning with Tables and Neural Networks)

    本文是对Arthur Juliani在Medium平台发布的强化学习系列教程的个人中文翻译.(This article is my personal translation for the tutor ...

  6. 深度强化学习:Policy-Based methods、Actor-Critic以及DDPG

    Policy-Based methods 在上篇文章中介绍的Deep Q-Learning算法属于基于价值(Value-Based)的方法,即估计最优的action-value function $q ...

  7. 深度强化学习:Deep Q-Learning

    在前两篇文章强化学习基础:基本概念和动态规划和强化学习基础:蒙特卡罗和时序差分中介绍的强化学习的三种经典方法(动态规划.蒙特卡罗以及时序差分)适用于有限的状态集合$\mathcal{S}$,以时序差分 ...

  8. 强化学习之CartPole

    0x00 任务   通过强化学习算法完成倒立摆任务,控制倒立摆在一定范围内摆动. 0x01 设置jupyter登录密码 jupyter notebook --generate-config jupyt ...

  9. 【整理】强化学习与MDP

    [入门,来自wiki] 强化学习是机器学习中的一个领域,强调如何基于环境而行动,以取得最大化的预期利益.其灵感来源于心理学中的行为主义理论,即有机体如何在环境给予的奖励或惩罚的刺激下,逐步形成对刺激的 ...

随机推荐

  1. Docker scratch 无法正常运行golang二进制程序的问题

    使用Docker构建容器能够极大的降低运维成本,提高部署效率,同时非常方便对服务的平行扩展.然而在构建容器镜像过程中的,存在着一个难以避免的问题,就是如果使用常见的发行版本作为程序运行的基础环境,那么 ...

  2. [微信营销企划之路]001.环境搭建(XAMPP+WeiPHP)

    引言 本系列适合0基础的人员,因为我们就是从0开始的,此系列记录我们步入微信营销企划并进行开发的一些经验分享,望与君共勉!作为刚刚踏入微信队伍中的新人的我们,如果有什么不对的地方,还望不吝赐教. 在开 ...

  3. [FlashDevelop] 001.FlashDevelop + LayaFlash环境搭建

    产品简介: 唯一使用Flash直接开发或转换大型HTML5游戏的全套解决方案. 开发工具 FlashDevelop + JDK + flashplayer_18_sa_debug + LayaFlas ...

  4. 01 . Memcached简介及部署

    Memcached简介 memcached是一个自由开源,高性能,分布式内存对象存储系统 基于内存的key-valued存储,用来存储小块的任意数据(字符串,对象) 他是一个简洁的key-value存 ...

  5. 数据库之 MySQL --- 数据处理 之 单行函数、组函数 (四)

    [1]    LOWER : 将字符串中的内容全部转成小写             UPPER : 将字符串中的内容全部转成大写 SELECT LOWER ('abAcD') FROM DUAL SE ...

  6. TI CC1310 sub1G的SDK开发之入门

    CC1310是TI新出的一款sub1G射频模块,具体参数见数据手册吧,这款芯片的SDK跑的是rtos系统,是基于free-rtos定制的ti-rtos,多任务运行.芯片集成了两个核,一个M3做控制MU ...

  7. ASP.NET通过EntityFramework CodeFirst创建数据库

    Number1 新建一个项目 给新项目添加一个实体数据模型 选择第三个 这里我创建两个有关系的类,也就是有外键关系的数据库表 using System; using System.Collection ...

  8. Java实现 LeetCode 51 N皇后

    51. N皇后 n 皇后问题研究的是如何将 n 个皇后放置在 n×n 的棋盘上,并且使皇后彼此之间不能相互攻击. 上图为 8 皇后问题的一种解法. 给定一个整数 n,返回所有不同的 n 皇后问题的解决 ...

  9. java实现土地测量

    ** 土地测量** 造成高房价的原因有许多,比如土地出让价格.既然地价高,土地的面积必须仔细计算.遗憾的是,有些地块的形状不规则,比如是如图[1.jpg]中所示的五边形. 一般需要把它划分为多个三角形 ...

  10. Spring IoC 容器的扩展

    前言 本篇文章主要介绍 Spring 中 BeanFactory 的扩展 ApplicationContext,我们平时日常开发中也基本上是使用它,不会去直接使用 BeanFactory. 那么在 S ...