目录:
一、笔记
二、我的自学路线
三、笔记目录
一、笔记
① matplotlib是Python最常用的绘图库,提供了一整套十分适合交互式绘图的命令,是非常强大的Python画图工具。
② matplotlib可以画线图、散点图、等高线图、条形图、柱形图、3D图形、图形动画。
③ 想要使用matplotlib绘图,必须要先创建一个figure(画布)对象,然后还要有axes(坐标系)。
④ 当第一次执行http://plt.xxx()画图代码时,系统会判断是否已经有了figure对象,如果没有,系统会自动创建一个figure对象,并且在这个figure至上,自动创建一个axes坐标系(注意:默认只创建一个figure对象,一个axes坐标系)。也就是说,如果我们不设置figure对象,那么一个figure对象上,只能有一个axes坐标系,即我们只能绘制一个图形。
⑤ import matplotlib.pyplot as plt,导入matplotlib模块pyplot的模块,并简写成plt。
⑥ 可以调用pyplot模块的.plot方法绘制一些坐标,这个plot方法需要许多参数,但前两个是 "x" 和 "y" 坐标,放入列表。
⑦ plt.plot在后台[绘制]这个绘图,当绘制了我们想要的一切之后,需要把它带到屏幕上时,运用plt.show方法。
⑧ 设置在jupyter notebook中matplotlib的显示情况有两种方式:%matplotlib tk 在GUI显示
%matplotlib inline 在行内显示
import matplotlib.pyplot as plt
# %matplotlib tk 在GUI显示
%matplotlib inline
plt.plot([1,2,3],[5,6,7])
plt.show
运行结果:
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline
figure = plt.figure()
axes1 = figure.add_subplot(3,2,1) # 第一个数表示幕布figure有多少行,第二个数表示幕布有多少列,这里一共有 3*2 = 6 的索引,第三个值为绘图在哪个第几个索引上。
axes2 = figure.add_subplot(6,1,2) # axe2 和 axe1 是在同一个画布上画,但是每个划分区域,要画的位置不互相影响,但是由于在同一张幕布上,所以绘图索引对应的绘图有可能重叠
axes3 = figure.add_subplot(3,2,2)
axes1.plot([1,2,5,7],[4,5,6,7])
axes2.plot([6,7,2,5],[1,2,8,2])
axes3.plot([0,1,4,6],[8,2,5,7])
plt.show
运行结果:
plt.figure()
plt.subplot(2,1,1) # 表示整个图像分割成2行2列,当前位置为1
plt.plot([0,1],[0,1]) # 横坐标变化为[0,1],竖坐标变化为[0,2]
plt.subplot(2,3,4)
plt.plot([0,1],[0,2])
plt.subplot(2,3,5)
plt.plot([0,1],[0,3])
plt.subplot(2,3,6)
plt.plot([0,1],[0,4])
plt.show
运行结果:
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline
figure = plt.figure()
axes1 = figure.add_subplot(3,2,1)
axes2 = figure.add_subplot(3,2,1) # 如果行、列、索引都一样,那么就会在同一张图里用不同颜色画两条线
axes3 = figure.add_subplot(3,2,2)
axes1.plot([1,2,5,7],[4,5,6,7])
axes2.plot([6,7,2,5],[1,2,8,2])
axes3.plot([0,1,4,6],[8,2,5,7])
plt.show
运行结果:
import matplotlib.pyplot as plt
fig1 = plt.figure(num='figl',figsize=(6,9)) # 图片最左上角图片的title的名字为figl
%matplotlib inline
plt.xlim(0,20) # x轴坐标
plt.ylim(0,10) # y轴坐标
plt.show # 也可以用fig1.show
运行结果:
import matplotlib.pyplot as plt
import numpy as np
plt.figure('正弦曲线')
x = np.linspace(-1,1,50)
y1 = 2 *x +1
y2 = x **2
plt.figure() # 定义一个图像窗口
plt.plot(x,y1) # 画出曲线
plt.plot(x,y1,color='red',linewidth=2,linestyle='--') # 线的参数为红色、线宽为2、虚线
plt.plot(x,y2,color='green',marker='o',linewidth=1,markersize=3) # 点取o形,o形大小为3
plt.show # 显示图像
运行结果:
import matplotlib.pyplot as plt
plt.figure('正弦曲线')
x = np.linspace(-1,1,50)
y1 = 2 *x +1
y2 = x **2
plt.figure() # 定义一个图像窗口
plt.plot(x,y1) # 画出曲线
plt.plot(x,y1,color='red',linewidth=2,linestyle='--') # 线的参数为红色、线宽为2、虚线
plt.plot(x,y2,color='green',marker='o',linestyle='dashed',linewidth=1,markersize=3) # dashed也可以表示虚线,也可以用linstyle=':'
plt.xlabel("I'm x") # 自定义x坐标轴
plt.ylabel("I'm y") # 自定义x坐标轴
new_ticks = np.linspace(-1,2,5)
plt.xticks(new_ticks) # 替换x轴上新的下标
plt.yticks([-2,-1,1,2],[r'$really\ bad$','$bad$','$well$','$really\ well$']) # 替换y轴上新的坐标轴
# 若不加转义符\,那么会不识别空格,连在一起了
# 没有美元符号$,会把转义字符\也打印出来,所以当只有单个单词时,可以不加美元符号
# 不加转义r,不加美元符号,那么可以直接用空格,并且替换的值为正体,加了美元符号,字体变得倾斜
plt.show() # 显示图像
运行结果:
import matplotlib.pyplot as plt
plt.figure('正弦曲线')
x = np.linspace(-1,1,50)
y1 = 2 *x +1
y2 = x **2
plt.figure() # 定义一个图像窗口
plt.plot(x,y1) # 画出曲线
plt.plot(x,y1,color='red',linewidth=2,linestyle='--') # 线的参数为红色、线宽为2、虚线
plt.plot(x,y2,color='green',marker='o',linestyle='dashed',linewidth=1,markersize=3) # dashed也可以表示虚线,也可以用linstyle=':'
plt.xlabel("I'm x") # 自定义x坐标轴
plt.ylabel("I'm y") # 自定义x坐标轴
new_ticks = np.linspace(-1,2,5)
plt.xticks(new_ticks) # 替换x轴上新的下标
plt.yticks([-2,-1,1,2],[r'$really\ bad$','$bad$','$well$','$really\ well$']) # 替换y轴上新的坐标轴
ax = plt.gca() # gca = get current axis
ax.spines['right'].set_color('none') # 边框属性设置为none不显示,right为右边框
ax.spines['top'].set_color('none') # top为上边框
plt.show() # 显示图像
运行结果:
import matplotlib.pyplot as plt
plt.figure('正弦曲线')
x = np.linspace(-1,1,50)
y1 = 2 *x +1
y2 = x **2
plt.figure() # 定义一个图像窗口
plt.plot(x,y1) # 画出曲线
plt.plot(x,y1,color='red',linewidth=2,linestyle='--') # 线的参数为红色、线宽为2、虚线
plt.plot(x,y2,color='green',marker='o',linestyle='dashed',linewidth=1,markersize=3) # dashed也可以表示虚线,也可以用linstyle=':'
plt.xlabel("I'm x") # 自定义x坐标轴
plt.ylabel("I'm y") # 自定义x坐标轴
new_ticks = np.linspace(-1,2,5)
plt.xticks(new_ticks) # 替换x轴上新的下标
plt.yticks([-2,-1,1,2],[r'$really\ bad$','$bad$','$well$','$really\ well$']) # 替换y轴上新的坐标轴
ax = plt.gca() # gca = get current axis
ax.spines['right'].set_color('none') # 边框属性设置为none不显示,right为右边框
ax.spines['top'].set_color('none') # top为上边框
plt.plot(x,y1,color='red',linewidth=2,linestyle='--',label='linear line') # 划线的地方设置label
plt.legend(loc='best') # 将图例放在最好的位置
# plt.legend(loc=1) 1 表示设置为右上角
plt.show() # 显示图像
运行结果:
import matplotlib.pyplot as plt
plt.figure('正弦曲线')
x = np.linspace(-1,1,50)
y1 = 2 *x +1
y2 = x **2
plt.figure() # 定义一个图像窗口
# 设置标签的第二种方法
l1, = plt.plot(x,y1,color='red',linewidth=2,linestyle='--') # 线的参数为红色、线宽为2、虚线
l2, = plt.plot(x,y2,color='green',marker='o',linestyle='dashed',linewidth=1,markersize=3) # dashed也可以表示虚线,也可以用linstyle=':'
plt.legend(handles=[l1,l2],labels=['up','down'],loc='best')
plt.show
运行结果:
import matplotlib.pyplot as plt
import numpy as np
n = 1024
X = np.random.normal(0,1,n) # 每一个点的X值
Y = np.random.normal(0,1,n) # 每一个点的Y值
T = np.arctan2(Y,X) # arctan2 返回给定的X和Y值的反正切值
# scatter 画散点图 size = 75 颜色为T 透明度为50% 利用xticks函数来隐藏x坐标轴
plt.scatter(X,Y,s=75,c=T,alpha=0.5)
# plt.scatter(X,Y,s=75,c='r',alpha=0.5) 颜色全部都是red
plt.xlim(-1.5,1.5)
plt.xticks(()) # 忽略xticks
plt.xlim(-1.5,1.5)
plt.yticks(()) # 忽略yticks
plt.show
运行结果:
plt.figure(3)
x_index = np.arange(5)
x_data = ('A','B','C','D','E')
y1_data = (20,35,30,35,27)
y2_data = (25,32,34,20,25)
bar_width = 0.35 # 定义一个数字代表每个独立柱的宽度
rects1 = plt.bar(x_index,y1_data,width=bar_width,alpha=0.4,color='b',label='legend1') # 参数:左偏移、高度、柱宽、透明度、颜色、图例
rects2 = plt.bar(x_index + bar_width, y2_data,width=bar_width,alpha=0.5,color='r',label='legend2')
# 关于左偏移,不用关心每根柱的中心不中心,因为只要把刻度线设置在柱的中间就可以了
plt.xticks(x_index + bar_width/2, x_data) # x轴刻度线
plt.legend()
plt.tight_layout()
plt.show()
运行结果:
import matplotlib.pyplot as plt
import numpy as np
%matplotlib inline
n = 12
X = np.arange(n)
Y1 = (1-X/float(n))*np.random.uniform(0.5,1,n)
Y2 = (1-X/float(n))*np.random.uniform(0.5,1,n)
plt.bar(X,+Y1,facecolor='#9999ff',edgecolor='white') # facecolor为柱子颜色,edgecolor为边框颜色
plt.bar(X,-Y2,facecolor='#ff9999',edgecolor='white')
for x,y in zip(X,Y1): # zip 可以传递两个值
plt.text(x+0.4,y+0.05,'%.2f'%y,ha='center',va='bottom') # ha表示横向对齐,bottom表示向下对齐
for x,y in zip(X,Y2):
plt.text(x+0.4,-y-0.05,'%.2f'%y,ha='center',va='top')
# plt.text(x+0.4,-y-0.05) 会产生一条线,ha='center',ha表示x方向并取在线条的中间,va='top',表示y方向,top表示线在文字的上面
plt.xticks(()) # 忽略xticks
plt.yticks(()) # 忽略yticks
plt.show()
运行结果:
# 图中图
fig=plt.figure()
x=[1,2,3,4,5,6,7]
y=[1,3,4,2,5,8,6]
# 绘制大图:假设大图的大小为10,那么大图被包含在由(1,1)开始,宽8高8的坐标系之中。
left,bottom,width,height = 0.1,0.1,0.8,0.8
ax1 = fig.add_axes([left,bottom,width,height]) # main、axes
ax1.plot(x,y,'r') # 绘制大图,颜色为red
ax1.set_xlabel('x') # 大图横坐标名称x
ax1.set_ylabel('y') # 大图纵坐标名称y
ax1.set_title('title') # 大图名称为title
# 绘制小图,注意坐标系位置和大小的改变
ax2 = fig.add_axes([0.2,0.6,0.25,0.25])
ax2.plot(y,x,'b') # 绘制小图,颜色为blue
ax2.set_xlabel('x') # 小图横坐标名称x
ax2.set_ylabel('y') # 小图横坐标名称y
ax2.set_title('title inside 1') # 小图横坐标名称title inside 1
# 绘制第二个小图
plt.axes([0.6,0.2,0.25,0.25])
plt.plot(y[::-1],x,'g') # 将y进行逆序
plt.xlabel('x')
plt.ylabel('y')
plt.title('title inside 2')
plt.show()
运行结果:
二、我的自学路线
01 安装Python编辑器 [ 已整理 ]
02 Python编译器快捷键 [ 已整理 ]
03 Python基础 [ 已整理 ]
04 Python难点 [ 已整理 ]
05 Python常用的库 [ 已整理 ]
06 爬虫 [ 看视频ing ]
三、笔记目录
1) Python 编辑器
2) Python 基础
03) Python 难点
04) Python 常用的库
( ……更多笔记,见专栏 )
"♥我的笔记,希望对你有帮助♥"