1. 调整坐标轴和刻度

作为函数图像那个的必要组成部分,坐标轴和刻度直接反映了图形中变量的数值规模的范围

适当的调整和美化坐标轴及刻度能够让图形一目了然。

1.1 设置坐标轴刻度

刻度是图形的一部分,由刻度定位器(Tick Locator)和刻度格式器(Tick Formatter)两部分组成,其中刻度定位器用于制定刻度所在的位置,刻度格式器用于制定刻度显示。

刻度分为主刻度(Major Ticks)和次刻度(Minor Ticks),可以分别制定二者的位置和格式,次刻度默认为不显示。

为了展示设置刻度参数的效果,可以先使用plot()函数生成一条余弦曲线,代码如下:

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.ticker import AutoLocator,MultipleLocator,FormatStrFormatter
x=np.linspace(0,5,100)
y=np.cos(x)
fig=plt.figure(figsize=(4,4))
ax=fig.add_subplot(111)
ax.plot(x,y,lw=2)
plt.show()

接着设置坐标轴范围和主,次坐标轴

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.ticker import AutoMinorLocator,MultipleLocator,FormatStrFormatter
x=np.linspace(0,5,100)
y=np.cos(x)
fig=plt.figure(figsize=(4,4))
ax=fig.add_subplot(111)ax.set_xlim(0,5)
ax.set_ylim(-1.5,1.5)
ax.xaxis.set_major_locator(MultipleLocator(1)) #将主刻度设为1的倍数
ax.yaxis.set_major_locator(MultipleLocator(1))
ax.xaxis.set_minor_locator(AutoMinorLocator(2))
ax.yaxis.set_minor_locator(AutoMinorLocator(5))ax.plot(x,y,lw=2)
plt.show()

可见,手工设置坐标轴范围和加入次坐标轴后,横轴的两个主刻度之间被平分成了两等分

纵轴的两个刻度之间被平均分成了5等分,而且曲线的弯曲程度也随之发生了一些变化。

1.2 设置坐标轴的标签文本

为了将次刻度对应的数值显示出来,可以使用以下代码调整坐标轴刻度的显示样式

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.ticker import AutoMinorLocator,MultipleLocator,FormatStrFormatter
x=np.linspace(0,5,100)
y=np.cos(x)
fig=plt.figure(figsize=(4,4))
ax=fig.add_subplot(111)ax.set_xlim(0,5)
ax.set_ylim(-1.5,1.5)
ax.xaxis.set_major_locator(MultipleLocator(1)) #将主刻度设为1的倍数
ax.yaxis.set_major_locator(MultipleLocator(1))
ax.xaxis.set_minor_locator(AutoMinorLocator(2))
ax.yaxis.set_minor_locator(AutoMinorLocator(5))ax.xaxis.set_minor_formatter(FormatStrFormatter('%5.1f')) #设置x轴标签文本格式
ax.yaxis.set_minor_formatter(FormatStrFormatter('%5.1f'))
ax.tick_params(which='minor',length=5,width=1,labelsize=8,labelcolor='r')
ax.tick_params('y',which='major',length=8,width=1,labelsize=10,labelcolor='b')
ax.plot(x,y,lw=2)
plt.show()

1.3 绘制刻度的网格线

为了更直观的看出图形子某些点的取值,可以给图形加上网格线,以下代码增加了主刻度的网格线,以蓝色虚线表示

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.ticker import AutoMinorLocator,MultipleLocator,FormatStrFormatter
x=np.linspace(0,5,100)
y=np.cos(x)
fig=plt.figure(figsize=(4,4))
ax=fig.add_subplot(111)ax.set_xlim(0,5)
ax.set_ylim(-1.5,1.5)
ax.xaxis.set_major_locator(MultipleLocator(1)) #将主刻度设为1的倍数
ax.yaxis.set_major_locator(MultipleLocator(1))
ax.xaxis.set_minor_locator(AutoMinorLocator(2))
ax.yaxis.set_minor_locator(AutoMinorLocator(5))ax.xaxis.set_minor_formatter(FormatStrFormatter('%5.1f')) #设置x轴标签文本格式
ax.yaxis.set_minor_formatter(FormatStrFormatter('%5.1f'))
ax.tick_params(which='minor',length=5,width=1,labelsize=8,labelcolor='r')
ax.tick_params('y',which='major',length=8,width=1,labelsize=10,labelcolor='b')ax.grid(ls=':',lw=0.8,color='b')
ax.plot(x,y,lw=2)
plt.show()

1.4 移动坐标轴的位置

很多人觉得图形只能绘制在直角坐标系的第一象限。其实不然,有时也可以通过移动坐标轴载体并设置刻度线的位置,来实现移动坐标轴,达到图形在四个象限完整显示的目的。以下代码将余弦函数显示在四个象限中,为了图形美观,增大了画布尺寸。

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.ticker import AutoMinorLocator,MultipleLocator,FormatStrFormatter
x=np.linspace(-5,5,100)
y=np.cos(x)
fig=plt.figure(figsize=(8,6))
ax=fig.add_subplot(111)ax.set_xlim(-5,5)
ax.set_ylim(-1.5,1.5)
ax.xaxis.set_major_locator(MultipleLocator(1)) #将主刻度设为1的倍数
ax.yaxis.set_major_locator(MultipleLocator(1))
ax.xaxis.set_minor_locator(AutoMinorLocator(2))
ax.yaxis.set_minor_locator(AutoMinorLocator(5))ax.xaxis.set_minor_formatter(FormatStrFormatter('%5.1f')) #设置x轴标签文本格式
ax.yaxis.set_minor_formatter(FormatStrFormatter('%5.1f'))
ax.tick_params(which='minor',length=5,width=1,labelsize=8,labelcolor='r')
ax.tick_params('y',which='major',length=8,width=1,labelsize=10,labelcolor='b')ax.spines['right'].set_color('b')
ax.spines['top'].set_color('r')
ax.spines['bottom'].set_color('y')
ax.spines['bottom'].set_position(('data',0))
ax.spines['left'].set_position(('data',0))
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')ax.grid(ls=':',lw=0.8,color='b')
ax.plot(x,y,lw=2)
plt.show()

2. 添加标题,图例和注释文本

好的图形需要给出恰当的标题,适当的注释及必要的图例,以方便阅读者理解图形的作用和没一部分的含义。

2.1 设置标题的展示样式

设置图形的标题可以通过title()函数实现,以下代码使用蓝色20号楷体字为上图添加了标题

plt.title('余弦函数在[-5,5]的图像',family='STXINWEI',size=20,color='b',loc='right')

2.2 添加注释文本

分为指向性注释和非指向性注释 分别使用annotate()函数和text()函数实现

ax.annotate('y=sin(x)',xy=(2.5,0.6),xytext=(3.5,0.6),arrowprops=dict(arrowstyle='->',facecolor='black'))
ax.text(-2.1,0.65,'y=cos(x)',color='b',bbox=dict(facecolor='black',alpha=0.2))

annotate()和text()的主要区别是annotate()可以使用arrowprops参数添加箭头,使用xytext参数添加文本

上述示例运行结果如下:

3.设置线性和文本字体

3.1 设置线型样式

常用四种线型:点虚线,点画线,破折线,实直线

import matplotlib.pyplot as plt
import numpy as np
fig=plt.figure()
ax=fig.add_subplot(111)
linestyles=['-','--','-.',':']
x=np.arange(1,11,1)
y=np.linspace(1,1,10)
for i ,ls in enumerate(linestyles):ax.text(0,i+0.5,"{}".format(ls),family='Arial',color='b',weight='black',size=12)ax.plot(x,(i+0.5)*y,ls=ls,color='r',lw=3)
ax.set_xlim(-1,11)
ax.set_ylim(0,4.5)
ax.set_xticks([])
ax.set_yticks([]) #可以不显示坐标轴的值
plt.show()

下面介绍常用标记样式

import matplotlib.pyplot as plt
import numpy as np
fig=plt.figure()
ax=fig.add_subplot(111)
linemarkernames=['. 点形','o 圆圈','v 向下的三角形','^ 向上的三角形','< 向左的三角形','> 向右的三角形','s 正方形','p 五边形','* 星形','+ +形','x x形','| 竖线','_ 横线',]
linemarkerstyles=['.','o','v','^','<','>','s','p','*','+','x','|','_']
x=np.arange(5,11,1)
y=np.linspace(1,1,6)
print(y)
for i,marker in enumerate(linemarkerstyles):ax.text(0,i*1.8+1,linemarkernames[i],family='STXINWEI',color='b',weight='black',size=12)ax.plot(x,i*1.8*y+1,marker=marker,color='r',ls=':',lw=2,markersize=6)ax.set_xlim(-1,11)
ax.set_ylim(0,24)
ax.margins(0.3)
ax.set_xticks([])
ax.set_yticks([])
plt.show()

3.2 设置文本属性和字体属性

import  matplotlib.pyplot as plt
families=['arial','tahoma','verdana']
sizes=['xx-small','x-small','small','medium','large','x-large','xx-large']
styles=['normal','italic','oblique']
variants=['normal','small-caps']
weights=['light','normal','medium','roman','semibold','demibold','demi','bold','heavy','extra bold','black']
fig=plt.figure()
ax=fig.add_subplot(111)
ax.set_xlim(0,9)
ax.set_ylim(0,100)
y=0
size=sizes[0]
style=styles[0]
weight=weights[0]
variant=variants[0]
for family in families:x=0y=y+6for size in sizes:y=y+4samply=family+' '+sizeax.text(x,y,samply,family=family,size=size,style=style,weight=weight)
y=0
family=families[0]
size=sizes[4]
variant=variants[0]
for weight in weights:x=5y=y+0.5for style in styles:y=y+3samply=weight+' '+styleax.text(x, y, samply, family=family, size=size, style=style, weight=weight)ax.set_axis_off() #不显示坐标轴
plt.show()

python共有3种设置文字属性的方法

(1)对每个函数的每个参数单独指定取值,确定字体,字号,颜色等效果

(2)使用字典存储字体,字号,颜色等属性和取值,作为函数的关键字参数传入

(3)通过调整属性字典rcParams中的字体,字号,颜色等属性值实现

以下代码为图形中的文字指定了共同的字体,字号,颜色,为曲线指定了共同的线形和宽度

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.ticker import AutoMinorLocator,MultipleLocator,FormatStrFormatter
x=np.linspace(-5,5,100)
y=np.cos(x)
y1=np.sin(x)
elements=['正弦函数','余弦函数']
fig=plt.figure(figsize=(8,6))
ax=fig.add_subplot(111)plt.rcParams['lines.linewidth']=2
plt.rcParams['lines.linestyle']='-'
plt.rcParams['font.family']='STXINWEI'
plt.rcParams['font.style']='normal'
plt.rcParams['font.weight']='black'
plt.rcParams['font.size']='14'
plt.rcParams['text.color']='black'ax.set_xlim(-5,5)
ax.set_ylim(-1.5,1.5)
ax.xaxis.set_major_locator(MultipleLocator(1)) #将主刻度设为1的倍数
ax.yaxis.set_major_locator(MultipleLocator(1))
ax.xaxis.set_minor_locator(AutoMinorLocator(2))
ax.yaxis.set_minor_locator(AutoMinorLocator(5))ax.xaxis.set_minor_formatter(FormatStrFormatter('%5.1f')) #设置x轴标签文本格式
ax.yaxis.set_minor_formatter(FormatStrFormatter('%5.1f'))
ax.tick_params(which='minor',length=5,width=1,labelsize=8,labelcolor='r')
ax.tick_params('y',which='major',length=8,width=1,labelsize=10,labelcolor='b')ax.spines['right'].set_color('b')
ax.spines['top'].set_color('r')
ax.spines['bottom'].set_color('y')
ax.spines['bottom'].set_position(('data',0))
ax.spines['left'].set_position(('data',0))
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')ax.annotate('y=sin(x)',xy=(2.5,0.6),xytext=(3.5,0.6),arrowprops=dict(arrowstyle='->',facecolor='black'))
ax.text(-2.1,0.65,'y=cos(x)',color='b',bbox=dict(facecolor='black',alpha=0.2))plt.title('余弦函数在[-5,5]的图像',family='STXINWEI',size=20,color='b',loc='right')
cosine,=ax.plot(x,y)
sine,=ax.plot(x,y1)
plt.legend([sine,cosine],elements,loc='best')
ax.grid(ls=':',lw=0.8,color='b')
ax.plot(x,y,lw=2)
plt.show()

4. 使用颜色

4.1 使用颜色参数

颜色参数传入色彩值有3种方法

(1)使用色彩的英文单词,其中常用颜色可以使用单字母缩写

(2)使用16进制RGB字符串,不用区分大小写,如#8e3e1f表示栗色

(3)使用RGB或RGBA数字元组,表示每一个元素的取值范围为0~1,如(0.6,0.3,0.7,0.8)

以下代码选取了上述颜色中的6种来绘制直线

import matplotlib.pyplot as plt
import numpy as np
fig=plt.figure()
ax=fig.add_subplot(111)
colors=['k','lightgreen','skyblue','#8e3e1f','#f2eada',(0.6,0.3,0.7,0.8)]
x=np.arange(3,13,1)
y=np.linspace(1,1,10)
for i,color in enumerate(colors):ax.text(0,i+0.2,"{}".format(color),family='Arial',color='b',size=8)ax.plot(x,(i+0.2)*y,ls='-',color=color,lw=6)print(x)print((i+0.2)*y)
ax.set_xlim(-1,12)
ax.set_ylim(0,5.5)
ax.set_xticks([])
ax.set_yticks([])
plt.show()

4.2 使用色彩映射和颜色标尺

色彩映射是将不同亮度映射到不同色彩的操作,使用色彩映射可以冲哦那个新调整图像,使其在新的色彩空间中显示。可以在image(),pcolor()和scatter()等函数上使用色彩映射。

常用的色彩映射分为以下三类:

  1. Sequential:同一颜色从低饱和度过度到高饱和度的单色色彩映射,如Greys,Oranges,PuBuGn,autumn,winter等
  2. Diverging:从中间的明亮颜色过渡到两个不同颜色范围的方向上,如PiYG,RdYlBu,Spectral等
  3. Qualitative:颜色反差大,便于不同种类数据的直观区分,如Accent,Paired等

所有的色彩映射都可以同伙增加后缀“_r”来获取反向色彩映射

以下分别对示例图片应用了winter,RdYlBu和Accent这3种色彩映射,首先来看原图

import scipy.misc
import matplotlib.pyplot as plt
plt.imshow(scipy.misc.ascent())
plt.show()

应用winter色彩映射 如下

import scipy.misc
import matplotlib as mpl
import matplotlib.pyplot as plt
plt.imshow(scipy.misc.ascent(),cmap=mpl.cm.winter)
plt.show()

应用RdYlBu色彩映射 代码如下:

import scipy.misc
import matplotlib as mpl
import matplotlib.pyplot as plt
plt.imshow(scipy.misc.ascent(),cmap=mpl.cm.RdYlBu)
plt.show()

应用Accent色彩映射 代码如下:

import scipy.misc
import matplotlib as mpl
import matplotlib.pyplot as plt
plt.imshow(scipy.misc.ascent(),cmap=mpl.cm.Accent)
plt.show()

通过使用色彩映射,可以为图像添加颜色标尺,以下代码使用colorbar()函数为应用了灰度映射的示例图片添加了颜色标尺

import scipy.misc
import matplotlib as mpl
import matplotlib.pyplot as plt
plt.imshow(scipy.misc.ascent(),cmap=mpl.cm.Accent)
plt.colorbar()
plt.show()

5.划分画布

画布就是绘制和显示图形的区域。将画布划分为若干子区,目的是能更好的利用画布的空间,实现在一张画布中绘制多个图形,以提高查看效率

subplots()函数用于将画布划分为网格状的若干子区,其原型如下:

subplots(nrows,ncols,**kwargs)

参数含义:nrows:网格行数  ncols:网格列数

也可使用subplot()函数直接定位到划分后的子区,其原型如下

subplot(nrows,ncols,index,**kwargs)

参数含义:index:划分后子区的序号,子区序号按子区在画布中位置从左到右,从上到下的顺序,从1开始递增。例如subplot(2,3,4)表示第2行第1个子区(总第4个)

import scipy.misc
import matplotlib as mpl
import matplotlib.pyplot as plt
fig,ax=plt.subplots(2,2)
ax[0,0].imshow(scipy.misc.ascent())
ax[0,1].imshow(scipy.misc.ascent(),cmap=mpl.cm.Accent)
ax[1,0].imshow(scipy.misc.ascent(),cmap=mpl.cm.winter)
ax[1,1].imshow(scipy.misc.ascent(),cmap=mpl.cm.RdYlBu)
plt.show()

以上就是Matplotlib的美化和修饰图形  感谢大家的收藏和点赞 !!

如有问题在可下面评论一起讨论!!

使用Matplotlib美化和修饰图形相关推荐

  1. 绘制图形可以使用什么python数据库_用Matplotlib如何绘制3D图形

    Matplotlib是一个Python 2D绘图库,它可以在各种平台上以各种硬拷贝格式和交互式环境生成出具有出版品质的图形. 在上篇中讲述的是如何对图形颜色和线条的填充,而今天给大家带来的是用matp ...

  2. Python可视化matplotlib绘制三维可视化图形(Three-Dimensional)

    Python可视化matplotlib绘制三维可视化图形(Three-Dimensional) Matplotlib最初设计时只考虑二维可视化绘图.大约在1.0版本发布的时候,在Matplotlib的 ...

  3. python绘制3d图形-Python基于matplotlib实现绘制三维图形功能示例

    本文实例讲述了Python基于matplotlib实现绘制三维图形功能.分享给大家供大家参考,具体如下: 代码一: # coding=utf-8 import numpy as np import m ...

  4. 可视化篇(二)———使用matplotlib绘制常用3D图形及案例

    可视化篇(二)---使用matplotlib绘制常用3D图形及案例 摘要 (一)添加matplotlib 3D模块 (二)3d图中绘制曲线 (三)3d图中绘制散点图 (四)3d图中绘制线框图 (五)3 ...

  5. python绘制三维曲线图_Python基于matplotlib实现绘制三维图形功能示例

    本文实例讲述了Python基于matplotlib实现绘制三维图形功能.分享给大家供大家参考,具体如下: 代码一: # coding=utf-8 import numpy as np import m ...

  6. python画三维图-Python基于matplotlib实现绘制三维图形功能示例

    本文实例讲述了Python基于matplotlib实现绘制三维图形功能.分享给大家供大家参考,具体如下: 代码一: # coding=utf-8 import numpy as np import m ...

  7. matplotlib绘制两个图形及网格、透明度、图例、颜色等

    ZCQ 下面的实例展示了matplotlib绘制两个图形及网格.透明度.图例.颜色等的基本操作 上代码 #比较自己和同桌历次考试得优的门数 from matplotlib import pyplot ...

  8. python如何画贝塞尔曲线_Python使用matplotlib实现绘制自定义图形功能示例

    本文实例讲述了Python使用matplotlib实现绘制自定义图形功能.分享给大家供大家参考,具体如下: 一 代码 from matplotlib.path importPath from matp ...

  9. Matplotlib全部基础可视化图形及实现代码(共11种图形)

    Matplotlib全部基础可视化图形及实现代码 开始先来一段网络抄袭的的Matplotlib介绍 Matplotlib 是 Python 的绘图库,它能让使用者很轻松地将数据图形化,并且提供多样化的 ...

  10. matplotlib基础知识(图形绘制坐标轴、标签、刻度字体设置图例脊柱移动风格样式多图布局双轴显示)(1)

    文章目录 前言 一.图形绘制 二.坐标轴刻度.标签.标题 1.寻找字体 2.设置 三.图例 四.脊柱移动 五.风格样式-颜色.线形.点形.线宽.透明度 2.更多属性设置 六.多图布局 1.子视图 2. ...

最新文章

  1. Python模块之间的相互引用问题
  2. struts2 跳转类型 result type=chain、dispatcher、redirect
  3. 路飞学城Python-Day46
  4. 虚拟机硬盘启动计算机后黑屏,高手亲自教告诉你win7虚拟机启动后黑屏的操作方案...
  5. 开学几天了,还没有进入状态,继续努力
  6. (转)c3p0配置大全
  7. ActiviteX 服务控件
  8. C++11系列学习之七---------初始化列表
  9. 带你自学Python系列(七):Python列表复制陷阱
  10. 《算法导论》读书笔记之第3章 函数的增长
  11. 大数据基础(一)——关系+文章
  12. word2vec原理CBOW与Skip-Gram模型基础
  13. Tally项目笔记001
  14. 数据仓库系列之元数据管理
  15. Pinterest和Instagram哪个更好用?姐妹还是天敌...
  16. 用 Python 分析韦德职业生涯数据
  17. Oracle域完整性约束
  18. Flink滚动窗口函数的开窗起始时间计算规则
  19. 盘古开源解析:2022年数据存储五大趋势
  20. 025 导数的四则求导法则之u+v、uv、u/v求导

热门文章

  1. PC 护眼模式(凑合用)
  2. osl倒数第三层_原子最外层、次外层及倒数第三层最多容纳电子数的解释
  3. 百度汇率转换接口 php,利用yahoo汇率接口实现实时汇率转换示例 汇率转换器_php实例...
  4. 什么是bypass(转载)
  5. SLC、MLC、TLC和QLC这几种存储颗粒的区别
  6. RAID磁盘阵列简介
  7. 第三章 一元函数积分概念、计算及应用
  8. 哈佛幸福课23集观后感
  9. 轻松两步实现了接口限流
  10. Linux内核子系统---内存管理子系统、进程管理子系统