参考链接:https://www.cnblogs.com/dudududu/p/9149762.html

更详细的:https://www.cnblogs.com/zhizhan/p/5615947.html

Matplotlib是一个2D绘图库,在绘图及显示效果方面更加出色,它和大名鼎鼎的matlab并不是一个软件,可以认为前者是后者迁移到Python上的图形库

使用:

  安装matplotlib

pip install matplotlib

  我们先从简到繁,先绘制一组正弦和余弦图像,然后再逐步美化它

import matplotlib.pyplot as plt#约定俗成的写法
import numpy as np def draw():
   #endpoint=True的作用还不清楚
X=np.linspace(-np.pi,np.pi,256,endpoint=True)#linspace是Matlab中的一个指令,用于产生指定范围内(-np.pi[-π] to np.pi[π])的指定数量点数(256),相邻数据跨度相同,并返回一个行向量。
C,S=np.cos(X),np.sin(X)#C,S分别对应上述256个值对应的正弦函数值和余弦函数值组成的numpy数组
plt.plot(X,C)#画线的函数传入的numpy数组
plt.plot(X,S)
plt.show()
draw()

  使用matplotlib的默认配置,可以满足我们的大部分要求,比如运行上面的代码,我们就可以得到漂亮的图像

  上面的线条颜色(不同的线条颜色),线条宽度都是matplotlib的默认配置定义的。不过我们任然可以自定义大多数的默认配置,比如颜色、粗细、风格、图片大小和分辨率、风格、坐标轴、坐标轴以及网格的属性、文字以及文字属性等

默认配置

import matplotlib.pyplot as plt
import numpy as np #创建一个8*6点的图(应该是画布的意思),分辨率为80,不知道这个8*6点是什么意思,是图像长宽矩形画布的比例吗,可能是,截图的尺寸差不多
plt.figure(figsize=(8,6),dpi=80)#记得加plt#*********************************看这个######若是需要对这个画板进行操作,比如添加动画什么的,就需要把这个创建的figure对象保存起来fig=plt.figure(8,6)
#创建一个新的1*1的子图,接下来的图绘制在第一块(也是唯一的一块)
plt.subplot(1,1,1)#*********************************看这个#这个也返回一个对象ax=fig.subplot(111)#若是上面的保存了
X=np.linspace(-np.pi,np.pi,256,endpoint=True)
C,S=np.cos(X),np.sin(X)
#绘制余弦图像,使用的线条属性为:红色、宽度为1,线条为点
plt.plot(X,C,color="red",linewidth=1.0,linestyle=':')#*********************************看这个代替plt.plot(X,C)
# linestyle的种类有'-', '--', '-.', ':', 'None', ' ', '', 'solid', 'dashed', 'dashdot', 'dotted'
plt.plot(X,S,color="gray",linewidth=1.0,linestyle='-')
#设置X轴的上下限(注意两个不同)
plt.xlim(-4.0,4)#*********************************看这个
#设置X轴上的坐标,可以指定显示-4到4这个区域的,9代表将区域等分为9个点
plt.xticks(np.linspace(-4,4,9,endpoint=True))#*********************************看这个
plt.ylim(-1.0,1.0)
plt.yticks(np.linspace(-1,1,5,endpoint=True)) #以指定的80分辨率保存图片,保存的位置在这个.py程序同目录下
plt.savefig('example_1.png',dpi=80)#*********************************看这个
#supported formats: eps, pdf, pgf, png, ps, raw, rgba, svg, svgz
plt.show()

  2)可以改变figure中的值来水平或垂直方向上拉伸图片

plt.fingure(figsize=(8,6),dpi=80)
plt.fingure(figsize=(10,6),dpi=80)#与上面绘制的图像相比,将会水平拉伸整个图片

  3)调整画布和内容的边界(留出一些间隔)

  可以获取到画布或子画布的最大最小值(是坐标轴上下限的数值),从而来调整边缘的空白,但我感到很奇怪,因为调整的基准是通过获取全契合时(即图像到了画布的边缘)画布的尺寸乘以某个倍数,这个尺寸是通过设置坐标轴的上下限来实现的,而改变也是通过设置画布的坐标轴的上下限来设置的,这不是进入了 死循环吗。不是的,因为获取的基准是通过np.linspace()返回的点设置的(那么新的问题,对于这个正弦余弦函数,y轴有范围,可是X轴左右不是无穷小和无穷大的吗,猜想是:在绘制时并不是真正的无穷大,因为无穷大的时候就没法绘制了,应该是matplotlib里面绘制有一个类似截取的机制。),设置坐标的上下限只是在程序完成的时候在裁剪一下了

  代码如下

plt.plot(X,S,color="gray",linewidth=1.0,linestyle='-')

xmin,xmax=X.min(),X.max()
ymin,ymax=C.min(),C.max()
dx=(xmax-xmin)*0.2
dy=(ymax-ymin)*0.2 #设置X轴的上下限(注意两个不同)
# plt.xlim(-4.0,4)
plt.xlim(xmin-dx,xmin+dx)

  4)设置坐标轴上的标记

# plt.xticks(np.linspace(-4,4,9,endpoint=True))
plt.xticks([-np.pi,-np.pi/2,0,np.pi/2,np.pi])#是为了找到某个坐标点而已了

  图片:

5)设置坐标的标签

  我们可以将3.142当成π,但是毕竟不太精确,当我们使用plt.xticks()设置坐标轴的坐标时,还可以同时设置坐标的“标签”,注意这里使用了lateX(百度LateX是一个排版软件,但下面语句唯一有些奇怪的就是一些类似特殊字符的代码,不知道他们和lateX有什么关系)

plt.xticks([-np.pi,-np.pi/2,0,np.pi/2,np.pi],[r'$-\pi$',r'$-\pi/2$',r'$0$',r'$+\pi/2$',r'$+\pi$'])

  效果:

6)移动“脊柱”

  不知道为什么把这个称作为脊柱(spine),反正坐标轴线和上面的标记(坐标)一块被称为“脊柱”,脊柱记录了数据区域的范围,他可以放在任何位置,不过至今为止(指本片文章到现在为止,并不是约定成俗的习惯),我们通常将他们放在图像的四边(上面图可以看出来,是两条有坐标的(左边和下边的)以及另外没有坐标的(上面和右边的))

  实际上每幅图像有四条脊柱,为了将脊柱放在图像的正中央,我们就必须隐藏其中的两条(右边和上边的),将他们两个调整为无色,然后调整剩下的两条到合适的位置,数据空间的零点

#将脊柱(坐标轴)调整到数据空间中的零点
plt.ax=plt.gca()
plt.ax.spines['right'].set_color('none')
plt.ax.spines['top'].set_color('none')
plt.ax.xaxis.set_ticks_position('bottom')#是设置坐标的位置在坐标轴下边
plt.ax.spines['bottom'].set_position(('data',0))
plt.ax.yaxis.set_ticks_position('left')
plt.ax.spines['left'].set_position(('data',0))

  效果:

7)添加图例

  不要忘记plt.legend(loc='upper left')

  图例是对图像进行说明的,比如cos函数的图像是什么亚子的,要添加图例,我们只需要在plot()函数里以【键-值】的形式添加一个参数

plt.plot(X,C,color="red",linewidth=2.0,linestyle=':',label='cosine')#label中显示不出中文

plt.legend(loc='upper left')#还有这个#legend:图例

# linestyle的种类有'-', '--', '-.', ':', 'None', ' ', '', 'solid', 'dashed', 'dashdot', 'dotted'
plt.plot(X,S,color="gray",linewidth=1.0,linestyle='-')

  效果:

8)给一些特殊点做注释

  假如我们希望在2/3π的位置给两条函数曲线上加一个注释,首先我们在对应的函数图像上的位置画一个点,然后向X轴引一条垂线,以虚线标记,最后写上注释的内容

---snip----
plt.ax.spines['left'].set_position(('data',0)) #给一些特殊点做注释
t=2*np.pi/3
plt.plot([t,t],[0,np.cos(t)],color='blue',linewidth=2.5,linestyle='--')
plt.scatter([t,],[np.cos(t),],50,color='blue')#scatter:分散
plt.annotate(r'$\sin(\frac{2\pi}{3})=\frac{\sqrt{3}}{2}$',#annotate:注释;别看长,写一遍就明白了
xy=(t,np.sin(t)),xycoords='data',#xy的位置
xytext=(+0,+0),textcoords='offset points',fontsize=16,#xytext:设置注释的位置相对偏移(类似坐标)
arrowprops=dict(arrowstyle='->',connectionstyle='arc3,rad=.2')#arrow:箭头
)
plt.plot([t,t],[0,np.sin(t)],color='red',linewidth=2.5,linestyle="--")
plt.scatter([t,],[np.sin(t),],50,color='red')
plt.annotate(r'$\cos(\frac{2\pi}{3})=-\frac{1}{2}$',
xy=(t,np.cos(t)),xycoords='data',
xytext=(-90,-50),textcoords="offset points",fontsize=16,
arrowprops=dict(arrowstyle="->",connectionstyle='arc3,rad=.2')
)
plt.show()

  效果:

9)设置坐标轴上的坐标样式(未生效)

  上图中的坐标被挡住了,为了让他们看起来更明显,可是放大他们、然后设置半透明的底色,这样,曲线和坐标都可见了

for label in ax.get_xticklabels() + ax.get_yticklabels():
label.set_fontsize(16)
label.set_bbox(dict(facecolor='white', edgecolor='None', alpha=0.65 ))

  下一篇学习图像、子图、坐标轴、记号

 10)设置标题:

  更多信息:https://blog.csdn.net/helunqu2017/article/details/78659490

plt.title('Interesting Graph',fontsize='large',fontweight='bold') 设置字体大小与格式
plt.title('Interesting Graph',color='blue') 设置字体颜色
plt.title('Interesting Graph',loc ='left') 设置字体位置
plt.title('Interesting Graph',verticalalignment='bottom') 设置垂直对齐方式
plt.title('Interesting Graph',rotation=45) 设置字体旋转角度
plt.title('Interesting',bbox=dict(facecolor='g', edgecolor='blue', alpha=0.65 )) 标题边框

  面向对象api例子:

import matplotlib.pyplot as plt
x=[1,2,3,4,5]
y=[3,6,7,9,2] fig,ax=plt.subplots(1,1)
ax.plot(x,y,label='trend')
ax.set_title('title test',fontsize=12,color='r')
plt.show()

  

												

Python 绘图与可视化 matplotlib(上)的更多相关文章

  1. Python 绘图与可视化 matplotlib(下)

    详细的参考链接:更详细的:https://www.cnblogs.com/zhizhan/p/5615947.html 图像.子图.坐标轴以及记号 Matplotlib中图像的意思是打开的整个画图窗口 ...

  2. Python 绘图与可视化 matplotlib 动态条形图 bar

    bar的参考链接:https://matplotlib.org/3.1.1/api/_as_gen/matplotlib.pyplot.bar.html 第一种办法 一种方法是每次都重新画,包括清除f ...

  3. Python 绘图与可视化 matplotlib 制作Gif动图

    参考链接:https://blog.csdn.net/theonegis/article/details/51037850 官方文档:https://matplotlib.org/3.1.0/api/ ...

  4. Python 绘图与可视化 matplotlib text 与transform

    Text 为plots添加文本或者公式,反正就是添加文本了 参考链接:https://matplotlib.org/api/_as_gen/matplotlib.pyplot.text.html#ma ...

  5. Python 绘图与可视化 matplotlib 散点图、numpy模块的random()

    效果: 代码: def scatter_curve(): # plt.subplot(1,1,1) n=1024 X=np.random.normal(0,1,n) Y=np.random.norma ...

  6. Python 绘图与可视化 matplotlib 填充fill和fill_between

    参考链接:https://blog.csdn.net/You_are_my_dream/article/details/53457960 fill()填充函数曲线与坐标轴之间的区域: x = np.l ...

  7. Python绘图与可视化

    Python有很多可视化工具,本篇只介绍Matplotlib. Matplotlib是一种2D的绘图库,它可以支持硬拷贝和跨系统的交互,它可以在Python脚本.IPython的交互环境下.Web应用 ...

  8. IPython绘图和可视化---matplotlib 入门

    最近总是需要用matplotlib绘制一些图,由于是新手,所以总是需要去翻书来找怎么用,即使刚用过的,也总是忘.所以,想写一个入门的教程,一方面帮助我自己熟悉这些函数,另一方面有比我还小白的新手可以借 ...

  9. 绘图和可视化---matplotlib包的学习

    matplotlib API函数都位于matplotlib.pyplot模块,通常引入约定为:import matplotlib.pyplot as plt 1.Figure和Subplot 图像都位 ...

随机推荐

  1. 执行目标文件引发的问题:syntax error: word unexpected (expe...

    今天不小心把一个目标文件当成了可执行文件放到开发板上进行执行,结果出现了这样一个问题:./hello_qt: line 1: syntax error: word unexpected (expect ...

  2. bitset骚操作

    bitset的用途挺多的,是一个比较骚的常数优化 一.很多位数的二进制数 poj 2443 http://poj.org/problem?id=2443 直接开个1万位的二进制数,求交就行了. 有关集 ...

  3. eclipse debug的时候提示debug Edit Source Lookup path

    原因可能是代码资源包未加载到debug的路径中,解决方法如下: Debug 视图下 ->在调试的线程上 右键单击 ->选择Edit Source Lookup Path ->选择Ad ...

  4. Hibernate-原生SQL查询

    HQL尽管容易使用,但是在一些复杂的数据操作上功能有限.特别是在实现复杂的报表统计与计算,以及多表连接查询上往往无能为力,这时可以使用SQL(Native SQL)实现HQL无法完成的任务. 1.使用 ...

  5. POSIX 线程编程(二)线程建立与终止

    创建与终止线程 线程的管理常用的API有: pthread_create(thread,attr,start_routine,arg) pthread_exit(status) pthread_can ...

  6. Apache Kylin高级部分之使用Hive视图

    本章节我们将介绍为什么须要在Kylin创建Cube过程中使用Hive视图.而假设使用Hive视图.能够带来什么优点.解决什么样的问题.以及须要学会怎样使用视图.使用视图有什么限制等等. 1.      ...

  7. hdu 4603 Color the Tree

    这道题细节真的非常多 首先能够想到a和b的最优策略一定是沿着a和b在树上的链走,走到某个点停止,然后再依次占据和这个点邻接的边 所以,解决这道题的过程例如以下: 预处理阶段: step 1:取随意一个 ...

  8. HDU 4912 lca贪心

    Paths on the tree Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Othe ...

  9. How to remove focus without setting focus to another control?

    How to remove focus without setting focus to another control? Ask Question up vote 67 down vote favo ...

  10. 读取excel模板填充数据 并合并相同文本单元格

    try             { string OutFileName = "北京市国控企业污染源废气在线比对监测数据审核表" + DateTime.Now.ToString(& ...