欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Matplotlib的基本使用

程序员文章站 2022-03-20 17:57:19
...

学习资源:https://www.bilibili.com/video/av16378354/

一、基本用法

import matplotlib.pyplot as plt
import numpy as np

x=np.linspace(-1,1,50)
y=2*x+1
plt.plot(x,y)
plt.show()

二、figure 图像

import matplotlib.pyplot as plt
import numpy as np

x=np.linspace(-1,1,50)
y1=2*x+1
y2=x**2+3

plt.figure()#一个窗口
plt.plot(x,y1)

plt.figure()#第二个窗口
plt.plot(x,y2)
plt.plot(x,y1,color='red',linewidth=10,linestyle='--')#显示在同一个窗口下
#color : 线条的颜色,linewidth : 线条的宽度, linestyle : 线条的样式
plt.show()

三、设置坐标轴

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-1, 1, 50)
y1 = 2 * x + 1
y2 = x ** 2
plt.figure()
plt.plot(x, y2)
plt.plot(x, y1, color='red', linewidth=1, linestyle='--')  # 显示在同一个窗口下

# one
plt.xlim((-1, 2))  # 设置x坐标轴的范围
plt.ylim((-2, 3))  # 设置y坐标轴的范围

# two
plt.xlabel('i am x')  # 设置x轴的标签
plt.ylabel('i am y')  # 设置y轴的标签

# three
# 改变x轴的下标
new_ticks = np.linspace(-1, 2, 5)
print(new_ticks)
plt.xticks(new_ticks)
# 同理y轴的下标也可以这样改变可以
plt.yticks([-2, -1.8, -1, 1.22, 3], ['really bad', 'bad', 'normal', 'good', 'really good'])  # 改变为其他的标签

# four
# gca='get current axis' 获取当前的轴
ax=plt.gca()#'top','bottom','left','right'对应四条轴
#将右边和顶部的轴设置为不可见
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')#x轴用底部的轴代替
ax.yaxis.set_ticks_position('left')#y轴用左边的轴代替
#挪动位置
ax.spines['bottom'].set_position(('data',-1))#x轴对应y轴的-1位置
ax.spines['left'].set_position(('data',0))#y轴对应x轴的0位置
plt.show()

四、Legend 图例

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-1, 1, 50)
y1 = 2 * x + 1
y2 = x ** 2
plt.figure()

# one
plt.xlim((-1, 2))  # 设置x坐标轴的范围
plt.ylim((-2, 3))  # 设置y坐标轴的范围

# two
plt.xlabel('i am x')  # 设置x轴的标签
plt.ylabel('i am y')  # 设置y轴的标签

# three
# 改变x轴的下标
new_ticks = np.linspace(-1, 2, 5)
print(new_ticks)
plt.xticks(new_ticks)
# 同理y轴的下标也可以这样改变可以
plt.yticks([-2, -1.8, -1, 1.22, 3], ['really bad', 'bad', 'normal', 'good', 'really good'])  # 改变为其他的标签


#-----------------------
#做一个图例

plt.plot(x, y2,label='up')#label 就是给数据取一个名字
plt.plot(x, y1, color='red', linewidth=1, linestyle='--',label='down')
plt.legend(loc='best')#显示图例,best-->放在最好的位置
plt.show()

五、Annotation 标注

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-3, 3, 50)
y = 2 * x + 1
plt.figure()
plt.plot(x, y)

ax = plt.gca()  # 获取当前的轴

ax.spines['right'].set_color('none')  # 将此轴颜色设置为无
ax.spines['top'].set_color('none')

ax.xaxis.set_ticks_position('bottom')  # x轴用底部的轴代替
ax.yaxis.set_ticks_position('left')

ax.spines['bottom'].set_position(('data', 0))  # 将x轴对应y轴的0坐标处
ax.spines['left'].set_position(('data', 0))  # y轴对应x轴的0坐标处

x0 = 1
y0 = 2 * x0 + 1
plt.scatter(x0, y0, s=50, color='b')  # 显示出这个点
plt.plot([x0, x0], [y0, 0], linewidth=2, linestyle='--')  # (x0,y0),(x0,0)两点间的线段
# ----------------
# 添加标注
# method1
'''
annotate(s, xy, xytext=None, xycoords='data',textcoords='data', arrowprops=None, **kwargs)
 s : 描述的内容
 xy : 加描述的点
 xycoords : 要描述的点是基于那个数据的
 xytext : 标注的位置,xytext=(30,-30),表示从标注点x轴方向上增加30,y轴方向上减30的位置
 textcoords='offset points' 标注的内容从xy设置的点进行偏移xytext
 textcoords='data' 标注内容为xytext的绝对坐标
 fontsize : 字体大小
 arrowstyle : 箭头样式'->'指向标注点 '<-'指向标注内容 还有很多'
 
            '->' 	    head_length=0.4,head_width=0.2
            '-[' 	    widthB=1.0,lengthB=0.2,angleB=None
            '|-|' 	    widthA=1.0,widthB=1.0
            '-|>' 	    head_length=0.4,head_width=0.2
            '<-' 	    head_length=0.4,head_width=0.2
            '<->' 	    head_length=0.4,head_width=0.2
            '<|-' 	    head_length=0.4,head_width=0.2
            '<|-|>' 	head_length=0.4,head_width=0.2
            'fancy' 	head_length=0.4,head_width=0.4,tail_width=0.4
            'simple' 	head_length=0.5,head_width=0.5,tail_width=0.2
            'wedge' 	tail_width=0.3,shrink_factor=0.5

'''
plt.annotate('2x+1=%s' % y0, xy=(x0, y0), xycoords='data',xytext=(+30, -30),\
             textcoords='offset points',arrowprops=dict(arrowstyle='->'))


#method2
plt.text(-1,3,'hello',fontdict={'size':20,'color':'green'})

plt.show()

六、axis tick 能见度

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(-3, 3, 50)
y = 0.1*x

plt.figure()
# 在 plt 2.0.2 或更高的版本中, 设置 zorder 给 plot 在 z 轴方向排序
plt.plot(x, y, linewidth=10, zorder=1)#zorder=1时能将被线条覆盖掉的坐标显示出来
plt.ylim(-2, 2)
ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].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))



#设置轴标记的能见度
for label in ax.get_xticklabels()+ax.get_yticklabels():#获得所有的轴标记
    label.set_fontsize(12)#设置轴标记字体大小
    #bbox设置目的内容的透明度相关参数
    #facecolor调节 box 前景色,edgecolor 设置边框, 本处设置边框为无,alpha设置透明度
    label.set_bbox(dict(facecolor='white',edgecolor='None',alpha=0.7))






plt.show()