目录

1、plot函数参数

2、添加图例

3、zorder绘图顺序控制

4、xticks高级设置

5、网格,背景色以及文字注释

5.1、绘制网格

5.2、背景色

5.3、文字注释


​​​​​​1、plot函数参数

plt.plot(x, y, color='r', linewidth=1.5, linestyle='-')
plt.plot(x, y, color="r", linestyle="--", marker="*", linewidth=1.0)

linewidth:设置线宽。

线条风格:

线条风格

实线

虚线

破折线

点画线

无线条

代码表示

-

:

-.

None 或 ,

线条颜色:

线条颜色

洋红

绿

代码表示

r

m

y

g

c

b

k

w

线条标记:

标记

描述

标记

描述

标记

描述

o

圆圈

.

*

星号

+

加号

v

朝下三角

^

朝上三角

朝左三角

>

朝右三角

D

大菱形

d

小菱形

s

正方形

p

五边形

H

大六边形

h

小六边形

p

八边形

x

✘号

None或,

无标记

https://blog.csdn.net/eefresher/article/details/90022648

2、添加图例

plt.plot(x, y, 'm--', label="y=sin(x)")
plt.legend(loc='best')

plt.legend( )中有handles、labels和loc三个参数,其中:

handles需要传入你所画线条的实例对象,这个我也解释不清楚......

labels是图例的名称(能够覆盖在plt.plot( )中label参数值)

loc代表了图例在整个坐标轴平面中的位置(一般选取'best'这个参数值)

注:loc这个参数的能传入的值和方式方法较多,最后进行总结

等价于:

line1, = plt.plot(x, y, 'm--') # 注意返回值为元组
plt.legend(handles=[line1], labels=["y=sin(x)"], loc='best')

参数loc:

best:自动适配

''xxx":9个坐标位置。

loc = (x, y)。(x, y)表示图例左下角的位置,这是最灵活的一种放置图例的方法,慢慢调整,总会找到你想要的放置图例的位置。

当使用loc = (x, y)时,x, y并不是轴域中实际的x, y的值,而是将x轴, y轴分别看成1, 即:

( x/(x_max-x_min) , y/(y_max-y_min) )(即进行归一化处理);

那么,在绘制图表时,若用到坐标轴的范围限制,如xlim=(0, 16), ylim=(0, 9)。在此基础上,如果要将图例放置到点(2, 2)上,loc实际传入的参数应该为:

loc = ( 2/(16-0) , 2/(9-0) )

即 loc = (2/16, 2/9)。

参考:https://zhuanlan.zhihu.com/p/111108841

https://zhuanlan.zhihu.com/p/99531531

#the ',' is very important in here l1, = plt...and l2, = plt...for this step
"""legend( handles=(line1, line2, line3),labels=('label1', 'label2', 'label3'),'upper right')shadow = True 设置图例是否有阴影The *loc* location codes are::'best' : 0,         'upper right'  : 1,'upper left'   : 2,'lower left'   : 3,'lower right'  : 4,'right'        : 5,'center left'  : 6,'center right' : 7,'lower center' : 8,'upper center' : 9,'center'       : 10,"""

其实我们plt.plot的时候返回的是一个线的对象,如果我们想在handle中使用这个对象,就必须在返回的名字的后面加一个","号;

legend = plt.legend(handles = [l1,l2],labels = ['hu','tang'],loc = 'upper center',shadow = True)
frame = legend.get_frame()
frame.set_facecolor('r')#或者0.9...

3、zorder绘图顺序控制

zorder控制绘图顺序,默认后面的覆盖前面的。

def zorder_test():x = np.linspace(-3, 3, 50)y1 = 0.1 * xy2 = x ** 2plt.figure()# zorder控制绘图顺序plt.plot(x, y1, linewidth=10, zorder=1, label=r'$y_1\ =\ 0.1*x$')plt.plot(x, y2, linewidth=10, zorder=2, label=r'$y_2\ =\ x^{2}$')plt.legend(loc='lower right')plt.show()

更改顺序。

def zorder_test():x = np.linspace(-3, 3, 50)y1 = 0.1 * xy2 = x ** 2plt.figure()# zorder控制绘图顺序plt.plot(x, y1, linewidth=10, zorder=2, label=r'$y_1\ =\ 0.1*x$')plt.plot(x, y2, linewidth=10, zorder=1, label=r'$y_2\ =\ x^{2}$')plt.legend(loc='lower right')plt.show()

高级应用,解决坐标轴被覆盖问题,看一下这个图:

import matplotlib.pyplot as plt
import numpy as npx = np.linspace(-3,3,50)
y1 = 0.1*x
y2 = x**2plt.figure()
#zorder控制绘图顺序
plt.plot(x,y1,linewidth = 10,zorder = 1,label = r'$y_1\ =\ 0.1*x$')
plt.plot(x,y2,linewidth = 10,zorder = 2,label = r'$y_2\ =\ x^{2}$')plt.ylim(-2,2)ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))plt.show()

从上面看,我们可以看见我们轴上的坐标被掩盖住了,那么我们怎么去修改他呢:

print(ax.get_xticklabels())
print(ax.get_yticklabels())for label in ax.get_xticklabels() + ax.get_yticklabels():label.set_fontsize(12)label.set_bbox(dict(facecolor = 'white',edgecolor='none',alpha = 0.8,zorder = 2))

完整代码:

def zorder_test():x = np.linspace(-3, 3, 50)y1 = 0.1 * xy2 = x ** 2plt.figure()# zorder控制绘图顺序plt.plot(x, y1, linewidth=10, zorder=1, label=r'$y_1\ =\ 0.1*x$')plt.plot(x, y2, linewidth=10, zorder=1, label=r'$y_2\ =\ x^{2}$')plt.ylim(-2, 2)ax = plt.gca()ax.spines['right'].set_color('none')ax.spines['top'].set_color('none')ax.xaxis.set_ticks_position('bottom')ax.spines['bottom'].set_position(('data', 0))ax.yaxis.set_ticks_position('left')ax.spines['left'].set_position(('data', 0))print(ax.get_xticklabels())print(ax.get_yticklabels())for label in ax.get_xticklabels() + ax.get_yticklabels():label.set_fontsize(12)label.set_bbox(dict(facecolor='white', edgecolor='none', alpha=0.8, zorder=2))plt.show()

这里需要注意:

1)ax.get_xticklabels()获取得到就是坐标轴上的数字;

2)set_bbox()这个bbox就是那坐标轴上的数字的那一小块区域,从结果我们可以很明显的看出来;

3)facecolor = 'white',edgecolor='none,第一个参数表示的这个box的前面的背景,边上的颜色。

4、xticks高级设置

把坐标轴换成不同的单位:

new_ticks = np.linspace(-1,2,5)
plt.xticks(new_ticks)
#在对应坐标处更换名称
plt.yticks([-2,-1,0,1,2],['really bad','b','c','d','good'])

那么如果我想把坐标轴上的字体更改成数学的那种形式:

#在对应坐标处更换名称
plt.yticks([-2,-1,0,1,2],[r'$really\ bad$',r'$b$',r'$c\ \alpha$','d','good'])

注意:

1)我们如果要使用空格的话需要进行对空格的转义"\ "这种转义才能输出空格;

2)我们可以在里面加一些数学的公式,如"\alpha"来表示;

3)如何去更换坐标原点,坐标轴呢?我们在plt.show()之前:

#gca = 'get current axis'
#获取当前的这四个轴
ax = plt.gca()
#设置脊梁(也就是包围在图标四周的默认黑线)
#所以设置脊梁的时候,一共有四个方位
ax.spines['right'].set_color('r')
ax.spines['top'].set_color('none')#将底部脊梁作为x轴
ax.xaxis.set_ticks_position('bottom')
#ACCEPTS:['top' | 'bottom' | 'both'|'default'|'none']#设置x轴的位置(设置底的时候依据的是y轴)
ax.spines['bottom'].set_position(('data',0))
#the 1st is in 'outward' |'axes' | 'data'
#axes : precentage of y axis
#data : depend on y dataax.yaxis.set_ticks_position('left')
# #ACCEPTS:['top' | 'bottom' | 'both'|'default'|'none']#设置左脊梁(y轴)依据的是x轴的0位置
ax.spines['left'].set_position(('data',0))

5、网格,背景色以及文字注释

5.1、绘制网格

用函数grid()添加网格,函数中我们可以定义网格的样式,比如线条颜色,类型,粗细等等。需要注意的是,如果你只想在对x轴,或者y轴添加网格,只需要设定参数axis="x"或axis="y"即可。axis参数一般默认为"both"表示,两个维度上都建立网格。

import matplotlib.pyplot as plt
import numpy as npx = np.arange(-1, 1, 0.1)
y = [2 * i for i in x]
plt.plot(x, y, color="r", linestyle="-", marker="^", linewidth=1)
plt.grid(color="k", linestyle=":")
plt.show()

结果:

5.2、背景色

通过向plt.subplot()函数传递参数facecolor设置图像的背景色。需要注意的是背景色的设置代码应该在绘制曲线之前,否则相当于给整张图上色,覆盖了要展示的曲线。比如下图,我设置背景色为绿色。其实这个功能在我看来实在是没什么大用,大多情况下,我们要用到的背景色都是白色,也就是默认的背景色。

import matplotlib.pyplot as plt
import numpy as npx = np.arange(-1, 1, 0.1)
y1 = np.exp(x)
y2 = np.exp(2 * x)plt.subplot(facecolor="g")plt.plot(x, y1, color="r", linestyle="-", marker="^")
plt.plot(x, y2, color="b", linestyle="-", marker="s")plt.grid(color="k", linestyle=":")
plt.show()

5.3、文字注释

plt.text(), plt.annotate()是两种向图像添加文本注释的方法。plt.text()可以在图像任意位置添加文字,plt.annotate()则可以帮助我们形象地为曲线中的某一个点添加注释。

import matplotlib.pyplot as plt
import numpy as npx = np.arange(-1, 1, 0.1)y1 = np.exp(x)
y2 = np.exp(2 * x)plt.plot(x, y1, color="r", linestyle="-", marker="^", linewidth=1)
plt.plot(x, y2, color="b", linestyle="-", marker="s", linewidth=1)plt.text(-0.5, 3, "exp functions", fontsize=10)plt.show()

plt.text()中前两个参数表示添加文字的坐标位置,最后一个参数是要添加的文本。

plt.annotate()与plt.text()类似,代码表示如下:

plt.annotate('A', xy=(0, 1), xytext=(-0.5, 2.5), arrowprops=dict(facecolor='k', headwidth=10, width=2))

分别解释一下,第一个参数’A’是注释文本,xy表示要注释的点的坐标,xytext表示注释文本的起始坐标,arrowprops表示箭头,我们可以通过一个字典形的变量,设置其样式,包括颜色,宽度等等(headwidth表示箭头宽度,width表示箭身的宽度)。画出来的图如下所示:

参考:

https://zhuanlan.zhihu.com/p/33270402

官网:http://matplotlib.org/

学习方式:从官网examples入门学习

  • http://matplotlib.org/examples/index.html
  • http://matplotlib.org/gallery.html

matplot画图-线型+图例+绘图顺序(二)相关推荐

  1. gnuplot画图命令_Gnuplot科学绘图(二十六)——image 绘图

    Gnuplot科学绘图系列内容Gnuplot科学绘图(二十一)--简单 3D 函数绘图Gnuplot科学绘图(二十二)--数据文件存储格式Gnuplot科学绘图(二十三)-- 3D 数据曲面绘图及边框 ...

  2. 学习matlab(八)——绘图(二维)

    目录 (1)plot函数 (2)Subplot函数 (3)叠加图绘制 (4)其它功能 (5)绘制直线 (6)极坐标绘图 (7)对数和半对数坐标系绘图 (8)双纵轴坐标 (9)窗口和标注 (10)获取和 ...

  3. Matlab绘图(二)—变色散点图二维、三维绘制

    Matlab绘图(二)-散点图绘制 前言 二维散点图 scatter函数 gscatterr函数 思考 三维散点图 scatter3函数 前言 总结一下最近针对散点图的绘制学习到的scatter与gs ...

  4. python二维图颜色函数_Python绘图之二维图与三维图详解

    各位工程师累了吗? 推荐一篇可以让你技术能力达到出神入化的网站"持久男" 1.二维绘图 a. 一维数据集 用 Numpy ndarray 作为数据传入 ply 1. import ...

  5. EGE绘图之二 窗口刷新

    EGE专栏:EGE专栏 上一篇:EGE绘图之一 绘图讲解 下一篇:EGE绘图之三 动画 EGE绘图之二 窗口刷新 目录 一.EGE的窗口刷新 1. EGE窗口刷新流程 2. 渲染模式 2.1 自动渲染 ...

  6. plot与legend画图与图例

    画图与图例: legend(x, y = NULL, legend, fill = NULL, col = par("col"), border = "black&quo ...

  7. [Qt教程] 第12篇 2D绘图(二)渐变填充

    [Qt教程] 第12篇 2D绘图(二)渐变填充 楼主  发表于 2013-4-23 17:59:31 | 查看: 689| 回复: 1 渐变填充 版权声明 该文章原创于Qter开源社区,作者yafei ...

  8. python根据f(x)绘图(二维)

    python根据函数f(x)绘图(二维) 1.加载相关库 2.根据有效范围生成点列x,并根据f(x)生成对应的点列y 3.绘制图像 f(x)=x^4 import matplotlib.pyplot ...

  9. Python实现可视化(一)--双Y轴画图及图例控制

    Python实现可视化(一)-双Y轴画图及图例控制 python实现可视化 基于python绘制双Y轴图像 1.图例与Y轴一致 // 加载相关库 import matplotlib.pyplot as ...

最新文章

  1. 【万级并发】电商库存扣减如何设计?不超卖!
  2. 神经网络 测试集loss不下降_【NLP高频面试题】神经网络及其优化
  3. C语言程序设计 | 操作符介绍与使用方法
  4. 2020计算机二级题库第14PPT,计算机二级考试MSOffice考精彩试题库ppt操作题附问题详解.doc...
  5. Item Pipeline
  6. RAC 中 ASM 实例名 与 节点的对应关系
  7. atos命令符化号crash文件
  8. 大咖来信 | 轮值董事长徐直军,复盘华为AI战略出台始末
  9. 代理网络中安装tomcat的注意事项
  10. 【直通华为HCNA/HCNP系列R篇5】DHCP服务配置与管理-王达-专题视频课程
  11. 计算机策略 提高网速,win10增加网速的方法_win10如何提高电脑网速
  12. Elasticsearch7.x搜索实战
  13. 基于networkx的《人民的名义》人物关系图
  14. m.2槽分类_什么是M.2扩展槽,如何使用?
  15. 沉痛悼念恩师莫绍揆先生
  16. VB 操作Excel
  17. 视频会议检测不到摄像头,电脑打开相关功能提示无法使用-驱动人生解决方案
  18. python练习——多个excel表格模板的读取,并进行简要的统计分析
  19. 我不曾忘记的初心-愿天堂没有代码
  20. zzuli 20级第八次周赛 2751: XZQ与字符串

热门文章

  1. swift5基本语法-Self 与self
  2. 《iptables详解 》RHEL6
  3. 基于python处理excel大量数据并导出至txt文件
  4. 腰围ndows怎么管理员删除,电脑里面本地连接的IP地址怎样设置啊?我设置不来.开机起来都慢的要死...
  5. COMOS的一些常用函数备注
  6. 【Git】Git基础
  7. 虚拟化 提升服务器性能,虚拟化性能提升
  8. USB/PCIE速率规格、USB相关知识
  9. C++11,使简单的事情简单
  10. 利用Servlet监听器实现简单网站访问量和在线人数统计