资讯专栏INFORMATION COLUMN

1. 科研绘图之 matplotlib 基本语法

seanHai / 2148人阅读

摘要:本节主要介绍的是的基本绘图功能,即在二维平面坐标系中绘制连续的曲线。因此,设置有四个坐标轴名。设置坐标刻度修改坐标轴不显示坐标轴绘制特殊点列表在图表中为某个点添加备注

matplotlib 基本功能

  matplotlib 是 Python 的一个绘图库,使用它可以很方便地绘制出版质量级别的图形图片。本节主要介绍的是 matplotlib 的基本绘图功能,即在二维平面坐标系中绘制连续的曲线。

  1. 设置线型、线宽和颜色;
  2. 设置坐标轴的范围;
  3. 设置坐标刻度;
  4. 设置坐标轴;
  5. 图例;
  6. 特殊点;
  7. 备注;

matplotlib 基本功能详解

matplotlib.pyplot 绘图核心API

import numpy as npimport matplotlib.pyplot as plt# x_array:<序列> 水平坐标序列# y_array:<序列> 竖直坐标序列plt.plot(x_array, y_array)# 显示图表plt.show()

案例:绘制一条正弦曲线

import numpy as npimport matplotlib.pyplot as plt# 在-2pi到2pi之间等间隔生成100个点x_array = np.linspace(-2 * np.pi, 2 * np.pi, 100)y_array = np.sin(x_array)plt.plot(x_array, y_array)# 将图像以.jpg的格式保存plt.savefig("sinx.jpg")plt.show()

1、绘制水平线与垂直线

import numpy as npimport matplotlib.pyplot as plt# vertical lines 绘制垂直线plt.vlines(xval, ymin, ymax, ...)# horizotal lines 绘制水平线plt.hlines(yval, xmin, xmax, ...)# 显示图表plt.show()
import numpy as npimport matplotlib.pyplot as plt# 等间隔拆分1000个点x = np.linspace(-np.pi, np.pi, 1000)y = np.sin(x)plt.plot(x, y)# 绘制一条水平线和垂直线(线条颜色是黑色)# 同时绘制多条竖直线plt.vlines([-2, -1, 0, 1, 2], -1, 1, colors="blue")  plt.hlines(0, -3, 3, color="red")plt.show()

图中绘制了 5 条垂直线( x = [-2, -1, 0, 1, 1], ymin = -1, ymax = 1 )和 1 条水平线( y = 0, xmin = -3, xmax = 3 ).

2、线型、线宽和颜色

  1. 线型:linestyle = [ ’ - ", ’ – ", ’ -. ", ’ : ’ ];

  2. 线宽:linewidth = 数字;

  3. 颜色:color = 英文颜色单词 或 常用颜色的英文首字母 或 #495434 或 (56,54,20);

  4. 透明度:alpha = 浮点数值;

比如:plt.plot(x_array, y_array, linestyle="--", linewidth=2, color="r", alpha=0.5)

import numpy as npimport matplotlib.pyplot as plt# 线性拆分1000个点x = np.linspace(-np.pi, np.pi, 1000)sinx = np.sin(x)cosx = np.cos(x)plt.plot(x, sinx, linestyle="-.", linewidth=2, color="dodgerblue", alpha=0.8)plt.plot(x, cosx, linestyle="--", linewidth=2, color="orangered", alpha=1)plt.savefig("cosx.png")plt.show()

3、设置坐标轴范围

案例:以 sigmoid 函数为例,设置 x x x 轴和 y y y 轴的坐标轴范围

# x_limt_min: x轴范围最小值# x_limt_max: x轴范围最大值plt.xlim(x_limt_min, x_limt_max)# y_limt_min: y轴范围最小值# y_limt_max: y轴范围最大值plt.ylim(y_limt_min, y_limt_max)
import numpy as npimport matplotlib.pyplot as pltx = np.linspace(-10, 10, 1000)y = 1/(1 + np.exp(-x))# 设置坐标轴的范围plt.xlim(-8, 8)  # 将x轴的范围设为[-8, 8]plt.ylim(-0.01, 1.01) # 将y轴的范围设为[-0.01, 1.01]plt.plot(x, y, linestyle="-", linewidth=2, color="red", alpha=0.8)plt.show()

4、设置坐标刻度

案例:把正弦函数 y = s i n x y=sinx y=sinx 的横坐标刻度设置为:0、 π 2 /dfrac{/pi}{2} 2π π /pi π 3 π 2 /dfrac{3/pi}{2} 23π 2 π 2/pi 2π.

# x_val_list:x轴刻度值序列# x_text_list:x轴刻度标签文本序列[可选]plt.xticks(x_val_list, x_text_list )# y_val_list:y轴刻度值序列# y_text_list:y轴刻度标签文本序列[可选]plt.yticks(y_val_list, y_text_list)

【推荐】:设置刻度值的时候,数值序列与文本序列的长度要一一对应且相同。

import numpy as npimport matplotlib.pyplot as pltx = np.linspace(-np.pi, np.pi, 1000)sinx = np.sin(x)# 设置坐标刻度x_val_list = [-np.pi, -1/2*np.pi, 0, 1/2*np.pi, np.pi]x_text_list = [r"-$/pi$", r"-$/dfrac{/pi}{2}$", r"$0$", r"$/dfrac{/pi}{2}$", r"-$/pi$"]plt.xticks(x_val_list, x_text_list)plt.plot(x, sinx, linestyle="-", linewidth=2, color="orangered", alpha=0.9)plt.savefig("ysinx.jpg")plt.show()

5、设置坐标轴

从上面绘制的曲线可以看到,坐标轴有上下左右,而实际绘制数学函数的图象时,我们的直角坐标系都是通过原点且相互垂直的。因此,matplotlib 设置有四个坐标轴名:left / right / top / bottom。

# 获取当前坐标轴ax = plt.gca()# 获取其中某个坐标轴(无非就是top/bottom/left/right)axis = ax.spines["坐标轴名"]# 设置坐标轴的位置# val:参照值axis.set_position((type, val))# 设置坐标轴的颜色# color: 颜色值字符串axis.set_color(color)

例如:ax.spines["left"].set_position(("data", 0)),先获取到当前的坐标轴,然后设置坐标轴的位置或颜色值。

import numpy as npimport matplotlib.pyplot as pltx = np.linspace(-np.pi, np.pi, 1000)sinx = np.sin(x)plt.plot(x, sinx, linestyle="-.",linewidth=2, color="red", alpha=0.9)# 设置坐标刻度x_val_list = [-np.pi, -1/2*np.pi, 0, 1/2*np.pi, np.pi]x_text_list = [r"-$/pi$", r"-$/frac{/pi}{2}$", r"$0$", r"$/frac{/pi}{2}$", r"-$/pi$"]plt.xticks(x_val_list, x_text_list)# 注意:这里我没有设置纵坐标的文本序列plt.yticks([-1, -0.5, 0.5, 1])# 修改坐标轴ax = plt.gca()ax.spines["top"].set_color("none")  # 表示不显示top坐标轴ax.spines["right"].set_color("none")ax.spines["left"].set_position(("data", 0))ax.spines["bottom"].set_position(("data", 0))plt.show()

6、图例

案例:显示两条曲线的图例,并测试 loc 属性;

设置图例的位置:loc : <关键字参数>制定图例的显示位置(如果不设置 loc,则显示默认位置)

plt.plot(x, y, ... label="", ...)plt.legend(loc="")
Location StringLocation Code
best0
upper right1
upper left2
lower left3
lower right4
right5
center left6
center right7
lower center8
upper center9
center10
import numpy as npimport matplotlib.pyplot as pltx = np.linspace(-np.pi, np.pi, 1000)sinx = np.sin(x)cosx = 1/2 * np.cos(x)plt.plot(x, sinx, linestyle="-.", linewidth=2, color="dodgerblue", label=r"$y=sin(x)$")plt.plot(x, cosx, linestyle="--", linewidth=2, color="orangered", label=r"$y=/frac{1}{2}cos(x)$")# 设置坐标刻度x_val_list = [-np.pi, -1/2*np.pi, 0, 1/2*np.pi, np.pi]x_text_list = [r"-$/pi$", r"-$/frac{/pi}{2}$", r"$0$", r"$/frac{/pi}{2}$", r"-$/pi$"]plt.xticks(x_val_list, x_text_list)plt.yticks([-1, -0.5, 0.5, 1])# 修改坐标轴ax = plt.gca()ax.spines["top"].set_color("none")  # 不显示top坐标轴ax.spines["right"].set_color("none")# 这里的data表示的是数据坐标系ax.spines["left"].set_position(("data",0))ax.spines["bottom"].set_position(("data",0))plt.legend(loc="upper left")plt.show()

7、特殊点

案例:绘制激活函数 sigmoid 曲线上的特殊点;

# xarray: <序列> 所有需要标注点的水平坐标组成的序列# yarray: <序列> 所有需要标注点的垂直坐标组成的序列plt.scatter(xarray, yarray,        marker="", 		# 点型 ~ matplotlib.markers       s=70, 			# 大小       edgecolor="", 	# 边缘色       facecolor="",	# 填充色       zorder=3			# 绘制图层编号 (编号越大,图层越靠上))

说明:标注特殊点用到了 pyplot 的散点图绘制方法

Matplotlib Point 样式(marker 属性)

import numpy as npimport matplotlib.pyplot as pltx = np.linspace(-20, 20, 1000)y = 1/(1+np.exp(-x))plt.plot(x, y, linestyle="-",linewidth=2, color="red", alpha=0.9, label=r"$/frac{1}{1+e^{-x}}$")# 设置坐标刻度plt.yticks([0.5, 1])# 修改坐标轴ax = plt.gca()ax.spines["top"].set_color("none")  # 不显示top坐标轴ax.spines["right"].set_color("none")ax.spines["left"].set_position(("data",0))ax.spines["bottom"].set_position(("data",0))# 绘制特殊点(列表)pointx = [0]pointy = [0.5]plt.scatter(pointx, pointy, marker="o", s=50, color="red", label="sample points",zorder=3)# 给图像设置标题plt.title(r"Function : $y=/dfrac{1}{1+e^{-x}}$")plt.legend()plt.show()

8、备注

案例:在某条曲线上的点添加备注,指明函数方程与值。

# 在图表中为某个点添加备注plt.annotate(    r"($/frac{/pi}{2}, 0)$",			# 备注显示的文本内容    xycoords="data",			# 备注目标点所使用的坐标系(data表示数据坐标系)    xy=(x, y),	 				# 目标点的坐标    textcoords="offset points",	# 参照点的偏移坐标系    xytext=(x, y),				# 备注文本的坐标    fontsize=14,				# 备注文本的字体大小    arrowprops=dict()			# 使用字典定义文本指向目标点的箭头样式)# arrowprops字典参数的常用keyarrowprops = dict(    arrowstyle="->",		 # 定义箭头样式    connectionstyle=""	 # 定义连接线的样式(angle3、arc3、bar))

个人觉得,arrowstyle 的参数很多,只需要记住 -> 就足够了。

import numpy as npimport matplotlib.pyplot as pltx = np.linspace(-np.pi, np.pi, 1000)sinx = np.sin(x)cosx = 1/2 * np.cos(x)plt.plot(x, sinx, linestyle="-.", linewidth=2, color="dodgerblue", label=r"$y=sin(x)$")plt.plot(x, cosx, linestyle="--", linewidth=2, color="orangered", label=r"$y=/frac{1}{2}cos(x)$")# 设置坐标刻度x_val_list = [-np.pi, -1/2*np.pi, 0, 1/2*np.pi, np.pi]x_text_list = [r"-$/pi$", r"-$/frac{/pi}{2}$", r"$0$", r"$/frac{/pi}{2}$", r"-$/pi$"]plt.xticks(x_val_list, x_text_list)plt.yticks([-1, -0.5, 0.5, 1])# 修改坐标轴ax = plt.gca()ax.spines["top"].set_color("none")  # 不显示top坐标轴ax.spines["right"].set_color("none")ax.spines["left"].set_position(("data",0))ax.spines["bottom"].set_position(("data",0))plt.legend(loc="upper left")# 绘制特殊点(列表)pointx = [np.pi / 2, np.pi / 2]pointy = [1, 0]plt.scatter(pointx, pointy, marker="o", s=50, color="red", label="sample points",zorder=3)# 在图表中为某个点添加备注plt.annotate(    r"$(/frac{/pi}{2}, 1)$",               xycoords="data",    xy=(np.pi / 2, 1),    textcoords="offset points",    xytext=(50, 30),    fontsize=14,    arrowprops=dict(        arrowstyle="->"<           
               
                                           
                       
                 

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/124487.html

相关文章

  • Jupyter 常见可视化框架选择

    摘要:可能对于社区而言,鼎鼎大名的是常见的可视化框架,而大家对于,以及为核心的交互式报告的可个视化方案就并没有那么熟悉。是维护的比较具有潜力的开源交互可视化框架。示例是基于和组合发展的内核交互式的可视化框架。 对于以Python作为技术栈的数据科学工作者,Jupyter是不得不提的数据报告工具。可能对于R社区而言,鼎鼎大名的ggplot2是常见的可视化框架,而大家对于Python,以及Jup...

    YuboonaZhang 评论0 收藏0
  • 利用 Matplotlib 绘制数据图形(二)

    摘要:先从最常见的图形开始折线图条形图柱状图散点图圆形图。追踪和的过程对用户是隐形的,我们只需要知道每次调用绘图方法,该绘图效果都会呈现在当前中就可以了后面会讲如何手动变更当前和折线图条形图柱状图散点图圆形图分别对应着中的五个绘图函数。 利用 Matplotlib 绘制数据图形(一) 了解了 Matplotlib 的基本知识之后,我们就可以开始上手试试画图了。 先从最常见的图形开始:折线图、...

    lansheng228 评论0 收藏0
  • 8个流行的Python可视化工具包,你更钟意哪一个?

    摘要:最终证明,及其相关工具的效率很高,但就演示而言它们并不是最好的工具。我按编号用颜色编码了每个节点,代码如下用于可视化上面提到的稀疏图形的代码如下这个图形非常稀疏,通过最大化每个集群的间隔展现了这种稀疏化。 showImg(http://upload-images.jianshu.io/upload_images/13825820-3a550fd2e61e1674.jpg?imageMo...

    iliyaku 评论0 收藏0
  • 【数据科学系统学习】Python # 数据分析基本操作[三] matplotlib

    摘要:有一些表示常见图形的对象称为块,完整的集合位于。中的绘图函数在中,有行标签列标签分组信息。密度图通过计算可能会产生观测数据的连续概率分布的估计而产生的。在探索式数据分析工作中,同时观察一组变量的散布图是很有意义的。 我们在上一篇介绍了 pandas,本篇介绍 matplotlib。 绘图和可视化 一个用于创建出版质量图表的桌面绘图包。 Matplotlib API入门 Figure ...

    BDEEFE 评论0 收藏0
  • 这里有8个流行的Python可视化工具包,你喜欢哪个?

    摘要:下面,作者介绍了八种在中实现的可视化工具包,其中有些包还能用在其它语言中。当提到这些可视化工具时,我想到三个词探索数据分析。还可以选择样式,它模拟了像和等很流行的美化工具。有很多数据可视化的包,但没法说哪个是最好的。 showImg(https://segmentfault.com/img/remote/1460000019029121); 作者:Aaron Frederick 喜欢用...

    testbird 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<