最简单的单图像生成
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-1,1,100) #从-1到1生成100个点
y = 2*x + 1
plt.plot(x,y)
plt.show()
多窗口与单窗口绘制多幅图像
- 多窗口
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-1,1,100)
y1 = 2*x +1
y2 = x**2
# figure 1
plt.figure()
plt.plot(x,y1)
# figure 2
plt.figure() #可选参数figsize,决定每个figure的大小
# plt.figure(figsize=(2,2)) ,分别代表长为2宽为2
plt.plot(x,y2)
plt.show()
- 单窗口
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-1,1,100)
y1 = 2*x +1
y2 = x**2
#其中pyplot.plot()函数又几个可选参数,color是颜色,linewidth是线宽,linestyle是线的类型
plt.plot(x,y1,color = 'red',linewidth = 2,linestyle = '--')
plt.plot(x,y2,color = 'blue',linewidth = 5,linestyle = '-')
plt.show()
设置坐标轴
- xy范围
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-3,3,100)
y = 2*x + 1
plt.xlim((-2,2)) #坐标轴范围改为了(-2,2)
plt.plot(x,y,color = 'red',linewidth = 2)
plt.show()
- xy轴描述
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-3,3,100)
y = 2*x + 1
plt.xlabel('This is x',fontsize = 24)
plt.ylabel('This is y',fontsize = 24) #可选变量可以改变描述的大小
plt.title('This is a title',fontsize = 24)
plt.plot(x,y,color = 'red',linewidth = 2)
plt.show()
- xy步进值
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-3,3,100)
y = 2*x
#这个可以修改函数的标签,通过设置点的多少来控制步进值
new_xticks = np.linspace(-2,2,9)
new_yticks = np.linspace(-4,4,11)
plt.xticks(new_xticks)
plt.yticks(new_yticks)
#这是直接限制坐标轴的长度
plt.xlim((-2,2))
plt.ylim((-4,4))
plt.plot(x,y)
plt.show()
- 替换xy数字,与x轴y轴描述不一样
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-2,2,20)
y = 2*x
new_yticks = np.linspace(-4,4,4)
plt.yticks(new_yticks,['a','b','c','d']) #一个变量是x轴原来或者想设置的值,后一个变量是需要替换的样子
plt.plot(x,y)
plt.show()
- 坐标轴位置设置
开始之前介绍几个函数:
(1). ax = plt.gca() #get current axis, 获取当前坐标轴
(2). ax.spines[‘right’].set_color(None) #spines在英语中是脊梁,脊柱的意思,很形象,可以通过’bottom’,‘top’,‘left’,'right’四个参数来调用
#这句话是让四方框的右上部分消失
(3). ax.xaxis.set_ticks_position(‘bottom’)
ax.yaxis.set_ticks_position(‘left’) #这两句话是控制x,y轴刻度的位置,参数可以是上面的四个字符
(4). ax.spines[‘bottom’].set_position((‘data’,0))
ax.spines[‘left’].set_position((‘data’,0)) #data是指按照坐标轴刻度移动。x坐标就移动到y轴0的位置,y坐标轴的移动同理
例如二次函数的绘制
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-2,2,100)
y = x**2
new_xticks = np.linspace(-2,2,9)
plt.xticks(new_xticks)
plt.xlabel('X Value',fontsize = 18)
plt.ylabel('X^2 Value',fontsize = 18)
ax = plt.gca()
ax.spines['right'].set_color(None)
ax.spines['top'].set_color(None)
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')
ax.spines['bottom'].set_position(('data',0))
ax.spines['left'].set_position(('data',0))
plt.plot(x,y,linewidth = 2)
plt.show()
图例的简单生成
- 方法1:使用变量存储函数,注意逗号的应用
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-2,2,100)
y1 = 2*x + 1
y2 = x**2
ax = plt.gca()
ax.spines['right'].set_color(None)
ax.spines['top'].set_color(None)
ax.spines['left'].set_position(('data',0))
ax.spines['bottom'].set_position(('data',0))
p1, = plt.plot(x,y1)
p2, = plt.plot(x,y2)
plt.legend(handles = [p1,p2],labels = ['2x+1','x^2'],loc = 'best')
plt.show()
其中legend的loc参数可以有这么几个选择:
‘best’,‘upper right’,‘upper left’,‘lower right’,‘lower left’,‘right’,‘center left’,‘center right’,‘lower center’,‘upper center’
- 方法2: 使用plot时自带label属性,然后再用legend改变位置
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-2,2,100)
y1 = 2*x + 1
y2 = x**2
ax = plt.gca()
ax.spines['right'].set_color(None)
ax.spines['top'].set_color(None)
ax.spines['left'].set_position(('data',0))
ax.spines['bottom'].set_position(('data',0))
plt.plot(x,y1,label = '2x+1')
plt.plot(x,y2,label = 'x^2')
plt.legend(loc = 'best')
plt.show()
简单的注释
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-3,3,100)
y1 = 2*x + 1
ax = plt.gca()
ax.spines['right'].set_color(None)
ax.spines['top'].set_color(None)
ax.spines['left'].set_position(('data',0))
ax.spines['bottom'].set_position(('data',0))
plt.plot(x,y1,color = 'red')
x0 = 0.5
y0 = 2*x0 +1
plt.scatter(x0,y0, s = 50,color = 'k')
plt.plot([x0,x0],[y0,0],'k--')
plt.annotate('zhushi',xy = (x0,y0),xytext = (1.5,0.5),color = 'k',arrowprops = dict(width = 2, color = 'purple',shrink = 0.05))
'''
xy=(横坐标,纵坐标) 箭头尖端
xytext=(横坐标,纵坐标) 文字的坐标,指的是最左边的坐标
arrowprops= dict(
color= '颜色',
shrink = '数字' <1 收缩箭头
width = 2,
)
'''
plt.show()
散点图
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(5)
y = np.arange(5)
plt.scatter(x,y,color = 'red',s = 30,alpha= 0.8)
#alpha 是不透明度,0~1的范围
plt.show()
直方图
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(5)
y = x**2 + 10
plt.bar(x,y,facecolor = 'purple'or '#9999ff',edgecolor = 'white')
for x,y in zip(x,y):
plt.text(x,y,'{}'.format(y))
plt.show()
等高线图
import matplotlib.pyplot as plt
import numpy as np
def f(x,y):
return (1-x/2+x**5+y**3)*np.exp(-x**2-y**2)
x = np.linspace(-3, 3, 256)
y = np.linspace(-3, 3, 256)
X, Y = np.meshgrid(x,y) #类似于告诉你底边就是x,y。高度是基于xy面的
plt.contourf(X,Y,f(X,Y),8,alpha=0.75,cmap=plt.cm.hot)
# 这是等高线的填充设置 alpha 是透明度 cmap可以理解为颜色
C = plt.contour(X,Y,f(X,Y),8,colors='black')
# 这是等高线的线设置
plt.clabel(C,inline=True,fontsize=10)
# inline表示数字是在线里面还是外面
# 数字8 代表是等高线图分成几部分,0是两部分,所以8是有10部分10个圈
plt.xticks(())
plt.yticks(())
# 这两个是把标签都覆盖了,就没有数字了
plt.show()