目录

  • cycler
  • 教程
  • 函数链接

matplotlib教程学习笔记

cycler

在教程开始之前,我们需要了解cycler模块

from __future__ import print_function
from cycler import cycler
color_cycler = cycler(color=["r", "g", "b"])  #通过cycler 可以创建cycler对象
color_cycler
'r'
'g'
'b'
len(color_cycler) #获取长度
3
color_cycler.keys #获取键
{'color'}
from __future__ import print_function
for v in color_cycler:print(v)
{'color': 'r'}
{'color': 'g'}
{'color': 'b'}
cycler(ec=color_cycler) #可以用已有的cycler对象作为cycler的参数,并返回一个相同的对象
'r'
'g'
'b'
for i in range(5):  #看到了这么做会报错,显然的print(color_cycler[i])
---------------------------------------------------------------------------ValueError                                Traceback (most recent call last)<ipython-input-9-b6d40aff26d1> in <module>1 for i in range(5):  #看到了这么做会报错,显然的
----> 2     print(color_cycler[i])C:\Ana\lib\site-packages\cycler.py in __getitem__(self, key)221                                 for k, v in six.iteritems(trans)))222         else:
--> 223             raise ValueError("Can only use slices with Cycler.__getitem__")224 225     def __iter__(self):ValueError: Can only use slices with Cycler.__getitem__
cc = color_cycler()
for j, c in zip(range(5), cc): #通过这种方式,我们实际上可以获得一个无限的序列print(j, c)
0 {'color': 'r'}
1 {'color': 'g'}
2 {'color': 'b'}
3 {'color': 'r'}
4 {'color': 'g'}
#俩个cycler对象的和会以一种“内积”的方式结合
lw_cycler = cycler(lw=range(1, 4)) #注意len(lw_cycler)==3
wc = lw_cycler + color_cycler #如果二者长度不同,是无法相加的
print(len(wc))
print(wc.keys)
for s in wc:print(s)
3
{'lw', 'color'}
{'lw': 1, 'color': 'r'}
{'lw': 2, 'color': 'g'}
{'lw': 3, 'color': 'b'}
#和是可交换的
lw_c = lw_cycler + color_cycler
c_lw = color_cycler + lw_cycler
for j, (a, b) in enumerate(zip(lw_c, c_lw)):print("({j}) A: {A!r} B:{B!r}".format(j=j, A=a, B=b))
(0) A: {'lw': 1, 'color': 'r'} B:{'color': 'r', 'lw': 1}
(1) A: {'lw': 2, 'color': 'g'} B:{'color': 'g', 'lw': 2}
(2) A: {'lw': 3, 'color': 'b'} B:{'color': 'b', 'lw': 3}
#通过一次性传入多个长度相等的参数,也可以做到类似和的操作
wc = cycler(c=['r', 'g', 'b'], lw=range(1,4))
for s in wc:print(s)
{'c': 'r', 'lw': 1}
{'c': 'g', 'lw': 2}
{'c': 'b', 'lw': 3}
# 乘法 类似“外积”的一种定义 就是每个都来一下
m_cycler = cycler(marker=['s', 'o'])
m_c = m_cycler * color_cycler
print(len(m_c))
print(m_c.keys)
for s in m_c:print(s)
6
{'marker', 'color'}
{'marker': 's', 'color': 'r'}
{'marker': 's', 'color': 'g'}
{'marker': 's', 'color': 'b'}
{'marker': 'o', 'color': 'r'}
{'marker': 'o', 'color': 'g'}
{'marker': 'o', 'color': 'b'}
#乘法交换后二者不一定一致
c_m = color_cycler * m_cycler
for j, (a, b) in enumerate(zip(c_m, m_c)):print("({j}) A: {A!r} B: {B!r}".format(j=j, A=a, B=b))
(0) A: {'color': 'r', 'marker': 's'} B: {'marker': 's', 'color': 'r'}
(1) A: {'color': 'r', 'marker': 'o'} B: {'marker': 's', 'color': 'g'}
(2) A: {'color': 'g', 'marker': 's'} B: {'marker': 's', 'color': 'b'}
(3) A: {'color': 'g', 'marker': 'o'} B: {'marker': 'o', 'color': 'r'}
(4) A: {'color': 'b', 'marker': 's'} B: {'marker': 'o', 'color': 'g'}
(5) A: {'color': 'b', 'marker': 'o'} B: {'marker': 'o', 'color': 'b'}
#整数数乘 好像就是简单地扩大几倍
color_cycler * 2 # == 2 * color_cycler
'r'
'g'
'b'
'r'
'g'
'b'
color_cycler.concat(color_cycler)  #在后面续上? concat
'r'
'g'
'b'
'r'
'g'
'b'
color_cycler.concat(m_cycler)  #看来concat必须key一致
---------------------------------------------------------------------------ValueError                                Traceback (most recent call last)<ipython-input-18-c4ba2b85481a> in <module>
----> 1 color_cycler.concat(m_cycler)  #看来concat必须key一致C:\Ana\lib\site-packages\cycler.py in concat(self, other)423             The concatenated `Cycler`424         """
--> 425         return concat(self, other)426 427 C:\Ana\lib\site-packages\cycler.py in concat(left, right)459                                just_one=left.keys ^ right.keys)460
--> 461         raise ValueError(msg)462 463     _l = left.by_key()ValueError: Keys do not match:Intersection: set()Disjoint: {'marker', 'color'}
# 切片操作
color_cycler[::-1] #倒序
'b'
'g'
'r'
color_cycler[:2]
'r'
'g'
color_cycler[1:]
'g'
'b'
#我们可以通过by_key方法来检视,感觉就是获得某个键及其值啊
c_m.by_key()
{'marker': ['s', 'o', 's', 'o', 's', 'o'],'color': ['r', 'r', 'g', 'g', 'b', 'b']}
#这个字典可以用作创建新的cycler的蓝本
bk = c_m.by_key()
bk['color'] = ['green'] * len(c_m)
cycler(**bk)
'green' 's'
'green' 'o'
'green' 's'
'green' 'o'
'green' 's'
'green' 'o'

一些例子

from itertools import cycle
import matplotlib.pyplot as plt
from cycler import cycler
import numpy as np
fig, (ax1, ax2) = plt.subplots(1, 2, tight_layout=True,figsize=(8, 4))
x = np.arange(10)
color_cycler = cycler(c=["r", "g", "b"])
for i, sty in enumerate(color_cycler):ax1.plot(x, x*(i+1), **sty)for i, sty in zip(range(1, 5), cycle(color_cycler)):ax2.plot(x, x*i, **sty)
C:\Ana\lib\site-packages\matplotlib\figure.py:2366: UserWarning: This figure includes Axes that are not compatible with tight_layout, so results might be incorrect.warnings.warn("This figure includes Axes that are not compatible "

这个例子利用了乘法

fig, (ax1, ax2) = plt.subplots(1, 2, tight_layout=True,figsize=(8, 4))
x = np.arange(10)color_cycle = cycler(c=['r', 'g', 'b'])
ls_cycle = cycler('ls', ['-', '--'])
lw_cycle = cycler('lw', range(1, 4))sty_cycle = ls_cycle * (color_cycle + lw_cycle)for i, sty in enumerate(sty_cycle):ax1.plot(x, x*(i+1), **sty)sty_cycle = (color_cycle + lw_cycle) * ls_cyclefor i, sty in enumerate(sty_cycle):ax2.plot(x, x*(i+1), **sty)

我们总是希望给与不同的线条以不同的方案(变着花样玩)

fig, ax = plt.subplots(tight_layout=True)
x = np.linspace(0, 2*np.pi, 1024)for i, (lw, c) in enumerate(zip(range(4), ['r', 'g', 'b', 'k'])):ax.plot(x, np.sin(x - i * np.pi / 4),label=r'$\phi = {{{0}}} \pi / 4$'.format(i),lw=lw + 1, #lw线宽c=c)ax.set_xlim([0, 2*np.pi])
ax.set_title(r'$y=\sin(\theta + \phi)$')
ax.set_ylabel(r'[arb]')
ax.set_xlabel(r'$\theta$ [rad]')ax.legend(loc=0);

更为复杂的

fig, ax = plt.subplots(tight_layout=True)
x = np.linspace(0, 2*np.pi, 1024)for i, (lw, c) in enumerate(zip(range(4), ['r', 'g', 'b', 'k'])):if i % 2:ls = '-'else:ls = '--'ax.plot(x, np.sin(x - i * np.pi / 4),label=r'$\phi = {{{0}}} \pi / 4$'.format(i),lw=lw + 1,c=c,ls=ls)ax.set_xlim([0, 2*np.pi])
ax.set_title(r'$y=\sin(\theta + \phi)$')
ax.set_ylabel(r'[arb]')
ax.set_xlabel(r'$\theta$ [rad]')ax.legend(loc=0);

教程

import matplotlib.pyplot as plt
import numpy as np
from cycler import cycler

我们先生成一些样本数据

x = np.linspace(0, 2 * np.pi, 50)
offsets = np.linspace(0, 2 * np.pi, 4, endpoint=False)
yy = np.transpose([np.sin(x + phi) for phi in offsets])
yy.shape
(50, 4)

prop_cycle: the property cycle, 控制未来绘图时候的一些style

default_cycler = (cycler(color=['r', 'g', 'b', 'y']) +cycler(linestyle=['-', '--', ':', '-.']))plt.rc('lines', linewidth=4)  #设置未来的lines的style
plt.rc('axes', prop_cycle=default_cycler) #设置未来的axes的style

通过matplotlib.axes.Axes.set_prop_cycle可以来设置相应prop_cycle

custom_cycler = (cycler(color=['c', 'm', 'y', 'k']) +cycler(lw=[1, 2, 3, 4]))fig, (ax0, ax1) = plt.subplots(nrows=2)
ax0.plot(yy) #default_cycler
ax0.set_title('Set default color cycle to rgby')
ax1.set_prop_cycle(custom_cycler)
ax1.plot(yy)
ax1.set_title('Set axes color cycle to cmyk')# Add a bit more space between the two plots.
fig.subplots_adjust(hspace=0.3)
plt.show()

函数链接

prop_cycle

转载于:https://www.cnblogs.com/MTandHJ/p/10863828.html

matplotlb 进阶之Styling with cycler相关推荐

  1. 正式压力测试:locust进阶,超简单搭建生产级locust集群

    locust进阶,搭建生产级locust集群 本教程基于k8s集群搭建,使用helm作为包管理工具 通过helm安装locust

  2. 伍六七带你学算法 进阶篇-生命游戏

    有趣的算法题–生命游戏 难度-中等 根据 百度百科 ,生命游戏,简称为生命,是英国数学家约翰·何顿·康威在 1970 年发明的细胞自动机. 想要体验生命游戏的小伙伴可以到这里-->生命游戏 进入 ...

  3. NLP进阶之(七)膨胀卷积神经网络

    NLP进阶之(七)膨胀卷积神经网络 1. Dilated Convolutions 膨胀卷积神经网络 1.2 动态理解 1.2.2 转置卷积动画 1.2.3 理解 2. Dilated Convolu ...

  4. js进阶 13-5 jquery队列动画如何实现

    js进阶 13-5 jquery队列动画如何实现 一.总结 一句话总结:同一个jquery对象,直接写多个animate()就好. 1.什么是队列动画? 比如说先左再下,而不是左下一起走 2.怎么实现 ...

  5. 一个java高级工程师的进阶之路【转】

    一个java高级工程师的进阶之路[转] 宏观方面 一. JAVA.要想成为JAVA(高级)工程师肯定要学习JAVA.一般的程序员或许只需知道一些JAVA的语法结构就可以应付了.但要成为JAVA(高级) ...

  6. SQL Server Extended Events 进阶 3:使用Extended Events UI

    开始采用Extended Events 最大的阻碍之一是需要使用Xquery和XML知识用来分析数据.创建和运行会话可以用T-SQL完成,但是无论使用什么目标,数据都会被转换为XML.这个限制在SQL ...

  7. 《OpenCV3编程入门》学习笔记5 Core组件进阶(六)输入输出XML和YAML文件

    第5章 Core组件进阶 5.6 输入输出XML和YAML文件 5.6.1 XML和YAML文件 XML和YAML是使用非常广泛的文件格式,可以利用XML或者YAML式的文件存储和还原各种数据结构,还 ...

  8. 《OpenCV3编程入门》学习笔记5 Core组件进阶(五)离散傅里叶变换(DFT)

    第5章 Core组件进阶 5.5 离散傅里叶变换(Discrete Fourier Transform,DFT) 5.5.1 离散傅里叶变换原理 1.对一张图像使用傅里叶变换就是把它分解成正弦和余弦, ...

  9. 《OpenCV3编程入门》学习笔记5 Core组件进阶(四)图像对比度、亮度值调整

    第5章 Core组件进阶 5.4 图像对比度.亮度值调整 5.4.1 理论依据 1.算子:一般图像处理算子都是一个函数,接受一个或多个输入图像,并产生输出图像 2.算子一般形式: 3.点操作(poin ...

  10. 《OpenCV3编程入门》学习笔记5 Core组件进阶(三)分离合并颜色通道

    第5章 Core组件进阶 5.3 分离&合并颜色通道 5.3.1 通道分离:split()函数 1.作用:将一个多通道数组分离成几个单通道数组,公式: 2.原型:(1)void split(c ...

最新文章

  1. Linux查看进程和进程管理
  2. 获得WebBrowser中的图片数据
  3. 正念奇迹(一则正能量)
  4. 快速指南:剖析JBoss BPM跨进程通信
  5. php 合并数组 效率,PHP将两个关联数组合并函数-增高函数效率
  6. 分析称2015年手机文娱将激增至540亿美元
  7. html页面ajax提交数据,ajax请求提交form表单
  8. 此博客不再更新,新博客地址https://xsamsara.tk/
  9. C++--第10课 - 构造与析构 - 下
  10. 排行榜或颁奖界面有时出现名字等项目上下错位,为什么?
  11. 贝叶斯决策论及朴素贝叶斯分类器
  12. ubuntu16.04系统安装nvidia显卡驱动
  13. PDF报表 项目实战总结(集成百度地图+遇到的问题)
  14. 麦克劳林级数与麦克劳林公式(泰勒公式)
  15. 如何使用JS实现banner图滚动
  16. deepin安装tftp服务器_Win10频发蓝屏,深度Deepin系统,调试华为AC和AP
  17. 河北计算机四六级报名入口,四六级考试报名入口
  18. IBM__P系列 小型机 故障定位 故障排除
  19. android studio listview点击事件,android如何响应listview上不同按钮点击事件
  20. LC并联谐振电路设计

热门文章

  1. 程序员失业一月转行去送外卖,晒出当天收入,还以为看错了
  2. Tomcat爆出严重漏洞,影响所有版本,波及约8万台服务器,附解决方案!(扩散!!!)...
  3. Spring Cloud 和 Dubbo,到底用哪个好?
  4. JDK 13 的 12 个新特性,真心厉害和好用
  5. 端午节,我们好好聊聊程序员这个群体
  6. 2016阿里技术论坛,阿里技术大神的互联网趋势分享
  7. 28 岁字节程序员退休,财务自由
  8. 感恩节,Google 翻译给大家送礼物啦!
  9. 上传本地项目到gitee_使用git将本地代码上传到gitee远程仓库
  10. 【转】数据结构图文解析之:二叉堆详解及C++模板实现