matplot画图-线型+图例+绘图顺序(二)
2021/7/9 23:10:06
本文主要是介绍matplot画图-线型+图例+绘图顺序(二),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
目录
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 * x y2 = x ** 2 plt.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 * x y2 = x ** 2 plt.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 np x = np.linspace(-3,3,50) y1 = 0.1*x y2 = x**2 plt.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 * x y2 = x ** 2 plt.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 data ax.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 np x = 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 np x = 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 np x = 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画图-线型+图例+绘图顺序(二)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-14后台交互资料入门指南
- 2024-11-14如何轻松创建项目环境:新手入门教程
- 2024-11-14如何抽离公共代码:初级开发者指南
- 2024-11-14Python编程入门指南
- 2024-11-14Python编程入门:如何获取参数
- 2024-11-14JWT 用户校验:简单教程与实践
- 2024-11-14Pre-commit 自动化测试入门指南
- 2024-11-14Python编程基础
- 2024-11-14Server Action入门教程:轻松掌握服务器操作
- 2024-11-14Server Component入门教程:轻松搭建服务器组件