课程地址:网易云课堂
https://study.163.com/course/courseMain.htm?courseId=1003240004
或者:
https://morvanzhou.github.io/tutorials/data-manipulation/plt/
莫烦大神的主页:
https://morvanzhou.github.io
以下代码全都在jupyter notebook中通过
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-3,3,50)
y = 2*x + 1
plt.figure(num=1,figsize=(8,5))
plt.plot(x,y) #画直线图
# plt.scatter(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') #将图像的左边框设置为y轴
ax.spines['bottom'].set_position(('data',0)) #将图像的x轴放在y轴的位置1
ax.spines['left'].set_position(('data',0)) #将图像的y轴放在x轴的位置0
x0 = 1
y0 = 2*x0 +1
plt.scatter(x0,y0,s=50,color='r') # 只画一个点,size=50,颜色为红色
plt.plot([x0,x0],[y0,0],'k--',lw=2.5) # 画出两个点之间的直线,k是black的简写
# --表示线的风格,lw是linewidth的简写
# method 1
#########################
plt.annotate(r'$2x+1=%s$' %y0,xy=(x0,y0), # 指向(x0,y0)
xycoords='data',xytext=(+30,-30), # 从x坐标加30,y坐标减30的地方开始画
textcoords='offset points',fontsize=16,
arrowprops=dict(arrowstyle='->',connectionstyle='arc3,rad=.2')) #最后这个参数都是和箭头的设置有关
# method 2
###########################
plt.text(-4,3,
'$This. is. the. some. text.\\mu.\\sigma_i.\\alpha_t$',
# 加点的地方视频里是\,但是这里会报错,视频里是花体,这里也无法显示
fontdict={'size':16,'color':'r'})
plt.show()
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-3,3,50)
y = 0.1*x
plt.figure()
plt.plot(x,y,linewidth=10) #线很粗,把坐标轴挡住了
# plt.plot(x,y,linewidth=10,alpha =0.3)
# plt.scatter(x,y,linewidth=0.1,alpha =0.3)
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') #将图像的下边框设置为x轴
ax.yaxis.set_ticks_position('left') #将图像的左边框设置为y轴
ax.spines['bottom'].set_position(('data',0)) #将图像的x轴放在y轴的位置1
ax.spines['left'].set_position(('data',0)) #将图像的y轴放在x轴的位置0
for label in ax.get_xticklabels() + ax.get_yticklabels():
label.set_fontsize(10)
# label.set_bbox(dict(facecolor='grey',edgecolor='red',alpha=0.9))
label.set_bbox(dict(facecolor='red',edgecolor='None',alpha=0.1))
#alpha是不透明度,0.9是有90%不透明,10%透明
#在这里显示跟视频不一样的是,坐标轴上的刻度数字还是被线盖住了
plt.show()
import matplotlib.pyplot as plt
import numpy as np #画散点图
n = 1024
X = np.random.normal(0,1,n) #在0到1之间生成n个随机数
Y = np.random.normal(0,1,n)
T = np.arctan2(Y,X) #for color value,用一个函数生成点的颜色的数值
# plt.scatter(X,Y)
# plt.scatter(X,Y,s=75,c=T) #还是透明点好看
plt.scatter(X,Y,s=75,c=T,alpha=0.5) #给每个点设置大小,颜色和透明度
#s是size的简写,c是color的简写,给每一个点一个颜色的数值,alpha是不透明度
# plt.scatter(np.arange(5),np.arange(5))
# plt.scatter([0,1,2,3,4],[0,1,2,3,4]) #这句和上句结果是完全一样的
plt.xlim((-1.5,1.5)) #设置x轴显示范围
plt.ylim((-1.5,1.5)) #设置y轴显示范围
# plt.xticks(()) #设置x轴刻度隐藏
# plt.yticks(()) #设置y轴刻度隐藏
plt.show()
import matplotlib.pyplot as plt
import numpy as np #画柱状图或者叫条形图
n = 12
X = np.arange(n) # 生成0,1,2,3,4,5,6,7,8,9,10,11这12个数字
Y1 = (1 - X/float(n)*np.random.uniform(0.5,1.0,n)) #在[0.5,1)中随机生成n个数
Y2 = (1 - X/float(n)*np.random.uniform(0.5,1.0,n))
# plt.bar(X,Y1)
# plt.bar(X,+Y1)
# plt.bar(X,-Y2)
# plt.bar(X,+Y1,facecolor='white',edgecolor='green') #自己搞得颜色好难看
# plt.bar(X,-Y2,facecolor='red',edgecolor='None')
# plt.figure(figsize=(15,15))
plt.bar(X,+Y1,facecolor='#9999ff',edgecolor='white') #这样好看多了
plt.bar(X,-Y2,facecolor='#ff9999',edgecolor='white')
for x,y in zip(X,Y1): #设置向上的柱状图
# ha:horizontal alignment 水平对齐方式
#va: vertical alignment 纵向对齐方式
plt.text(x +0.05,y +0.05,'%.2f' % y, ha='center', va='bottom')
for x,y in zip(X,Y2): #设置向下的柱状图
plt.text(x +0.05,- y -0.05,'-%.2f' % y, ha='center', va='top')
plt.xlim(-.5,n)
plt.xticks(())
plt.ylim(-1.25,1.25)
plt.yticks(())
plt.show()
import matplotlib.pyplot as plt
import numpy as np #画等高线图
def f(x,y):
# the height function
return (1-x/2+x**5+y**3)*np.exp(-x**2-y**2)
n = 256
x = np.linspace(-3,3,n) # 从-3到3生成256个点
y = np.linspace(-3,3,n)
X,Y = np.meshgrid(x,y) # 生成网格
plt.figure(figsize=(10,10))
# use plt.contourf to filling contours #填充颜色
# X,Y and value for (X,Y) point
plt.contourf(X,Y,f(X,Y),8,alpha=0.75, cmap= plt.cm.hot)
# plt.contourf(X,Y,f(X,Y),100,alpha=0.75, cmap= plt.cm.hot)
# plt.contourf(X,Y,f(X,Y),8,alpha=0.75, cmap= plt.cm.cool)
#use plt.contour to add contour lines
C = plt.contour(X,Y,f(X,Y),8,colors='black',linewidth=.5)
#adding label
plt.clabel(C,inline=True,fontsize=10)
# plt.clabel(C,inline=False,fontsize=10)
plt.xticks(())
plt.yticks(())
plt.show()
%matplotlib inline
# %matplotlib qt5
import matplotlib.pyplot as plt
import numpy as np #打印图像
a = np.array([0.313660827978, 0.365348418405, 0.423733120134,
0.365348418405, 0.439599930621, 0.525083754405,
0.423733120134, 0.525083754405, 0.651536351379]).reshape(3,3)
'''
for the value of "interpolation",check this:
https://matplotlib.org/examples/images_contours_and_fields/interpolation_methods.html
'''
# plt.imshow(a, interpolation='nearest', cmap='bone', origin='lower')
plt.imshow(a, interpolation='nearest', cmap='bone', origin='upper')
# plt.colorbar()
plt.colorbar(shrink=.8)
plt.xticks(())
plt.yticks(())
plt.show()
# %matplotlib qt5
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D # 画3D图
fig = plt.figure(figsize=(15,15))
ax = Axes3D(fig)
# X, Y value
X = np.arange(-4, 4, 0.25)
Y = np.arange(-4, 4, 0.25)
X, Y = np.meshgrid(X, Y) # x-y 平面的网格
R = np.sqrt(X ** 2 + Y ** 2)
# height value
Z = np.sin(R)
ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=plt.get_cmap('rainbow'))
# # ax.plot_surface(X, Y, Z, rstride=3, cstride=3, cmap=plt.get_cmap('rainbow'))
ax.contourf(X, Y, Z, zdir='z', offset=-2, cmap=plt.get_cmap('rainbow'))
#zdir='z' , offset=-2 表示把图像压倒在z轴上
# ax.contourf(X, Y, Z, zdir='x', offset=-4, cmap=plt.get_cmap('rainbow'))
#zdir='x', offset=-4 表示把图像压倒在x轴上
ax.set_zlim(-2,2) #这个图在视频里可以旋转,看不同的角度
plt.show()