赞
踩
Matplotlib中的基本图表包括的元素
+ x轴和y轴
水平和垂直的轴线
+ x轴和y轴刻度
刻度标示坐标轴的分隔,包括最小刻度和最大刻度
+ x轴和y轴刻度标签
表示特定坐标轴的值
+ 绘图区域
实际绘图的区域
相关实例代码在https://github.com/lm197704/db2020
#%%
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
%matplotlib inline
#%% md
### 图片灰度处理
#%%
把彩色图片转化为黑白图片
#%%
jin = plt.imread('jinzhengen.png')
plt.imshow(jin)
#%% md
三种方法
#%%
# 最大值法
jin_max = jin.max(axis=2)
jin_max.shape
plt.imshow(jin_max, cmap='gray')
#%%
# 最小值法
jin_min = jin.min(axis=2)
jin_min.shape
plt.imshow(jin_min, cmap='gray')
plt.axis('off')
#%%
# 平均值
jin_mean = jin.mean(axis=2)
jin_mean.shape
plt.imshow(jin_mean, cmap='gray')
#%%
# 加权平均
jin_weight = np.dot(jin, [0.299,0.587,0.114]) / 3
plt.imshow(jin_weight, cmap='gray')
#%%
#%% md
# matplotlib
#%% md
## 目录
+ 一、【重点】Matplotlib基础知识
+ 二、设置plot的风格和样式
+ 1、【重点】点和线的样式
+ 2、X、Y轴坐标刻度
+ 三、2D图形
+ 1、示例
+ 2、【重点】直方图
+ 3、【重点】条形图
+ 4、【重点】饼图
+ 5、【重点】散点图
=============以上为重点=================
#### 下面的自学
+ 四、图形内的文字、注释、箭头
+ 1、图形内的文字
+ 2、注释
+ 3、箭头
+ 五、3D图
+ 1、曲面图
#%% md
## 一、Matplotlib基础知识
#%% md
Matplotlib中的基本图表包括的元素
+ x轴和y轴
水平和垂直的轴线
+ x轴和y轴刻度
刻度标示坐标轴的分隔,包括最小刻度和最大刻度
+ x轴和y轴刻度标签
表示特定坐标轴的值
+ 绘图区域
实际绘图的区域
#%%
#pandas 绘图,提供方便
#matplotlib专门绘图工具,样式更加丰富
#%% md
### 只含单一曲线的图
#%%
n = np.array(np.random.randint(0,10, size=10))
n
#%%
# plt.plot只能画线型图,它没有kind, plt.bar, plt.hist, plt.scatter
plt.plot(np.arange(10), n)
#%%
# plt.plot中,x轴的数据不是必须的, 不传x轴数据,会自动使用y轴数据的索引作为x轴数据.
plt.plot(n)
#%% md
### 包含多个曲线的图
#%% md
1、可以使用多个plot函数(推荐),在一个图中绘制多个曲线
#%%
plt.plot(n) # 调用一次就会在当前画布中画出一条曲线
plt.plot(n,n)
#%% md
2、也可以在一个plot函数中传入多对X,Y值,在一个图中绘制多个曲线
#%%
plt.plot(np.arange(0,10), n , n, n)
#%%
plt.plot(n) # 调用一次就会在当前画布中画出一条曲线
plt.show()
plt.plot(n,n)
#%% md
### 网格线
绘制正选余弦
#%% md
使用plt.grid(True)方法为图添加网格线
#%% md
设置grid参数(参数与plot函数相同),使用plt面向对象的方法,创建多个子图显示不同网格线
![](1.PNG)
- lw代表linewidth,线的粗细
- alpha表示线的明暗程度
- color代表颜色
#%%
plt.plot(n,n)
plt.grid(lw=2, c='r', ls='-', alpha=0.5)
#%%
# 画子图有两种方法
x = np.linspace(-20, 20, 1000)
plt.figure(figsize=(3*5, 5))
axes1 = plt.subplot(1, 3, 1)
axes1.plot(x, np.sin(x))
axes1.grid(lw=2)
axes2 = plt.subplot(1,3, 2)
axes2.plot(x, np.cos(x))
axes2.grid(c='r', alpha=0.6)
axes3 = plt.subplot(1,3,3)
axes3.plot(x, x**2)
axes3.grid(c='g', ls='--')
#%%
# 另一种画子图的方法
figure = plt.figure(figsize=(3*5, 5))
axes1 = figure.add_subplot(1,3,1)
axes1.plot(x, np.sin(x))
axes1.grid(lw=2)
axes2 = figure.add_subplot(1,3,2)
axes2.plot(x, np.cos(x))
axes2.grid(c='r', alpha=0.6)
#%% md
### 坐标轴界限
#%% md
#### axis方法
如果axis方法没有任何参数,则返回当前坐标轴的上下限axis(xmin =,ymax = )
#%%
x = np.linspace(-1,1, 100)
y = (1 - x**2) ** 0.5
plt.plot(x, y, x, -y)
# 显示当前坐标轴的界限
plt.axis()
# 设置坐标轴界限
plt.axis([-1,1, -1,1])
# 单独 设置 x轴界限
plt.axis(xmin=-1, xmax=3)
#%% md
##### plt.axis('xxx') 'tight'、'off'、'equal'……
设置坐标轴类型
关闭坐标轴
![](2.png)
#%%
plt.plot(x, y, x, -y)
# 默认是tight, 紧凑的分割
# plt.axis('equal')
# 取消坐标轴
plt.axis('scaled')
#%% md
#### xlim方法和ylim方法
除了plt.axis方法,还可以通过xlim,ylim方法设置坐标轴范围
#%%
plt.plot(x, y, x, -y)
# 只能单独设置x轴刻度
plt.xlim(xmin=-2, xmax=2)
plt.ylim(-2,2)
#%% md
### 坐标轴标签
xlabel方法和ylabel方法
plt.ylabel('y = x^2 + 5',rotation = 60)旋转
#%%
plt.plot(x, y, x, -y)
plt.axis('equal')
# 设置x轴的标签
plt.xlabel('X', fontdict=dict(fontsize=20))
plt.ylabel('y=(1-x^2)^0.5', rotation=0, position=(0.5,1))
#%% md
### 标题
title方法
#%%
plt.figure(figsize=(2*5, 5))
axes1 = plt.subplot(1,2,1)
axes1.plot(x, y, x, -y)
axes1.axis('equal')
# 设置x轴的标签
# 子图要使用set_xxx
axes1.set_xlabel('X', fontdict=dict(fontsize=20))
axes1.set_ylabel('y=(1-x^2)^0.5', rotation=0, position=(0.5,1))
axes1.set_title('The Circle', rotation=60, position=(1,1))
#%% md
### 图例
#%% md
#### legend方法
两种传参方法:
- 【推荐使用】在plot函数中增加label参数
- 在legend方法中传入字符串列表
![](3.png)
#%%
# 推荐写法
x = np.linspace(0,10, 10)
# 图例名称不要以下划线开头
plt.plot(x, 0.5 * x, label='_slow')
plt.plot(x, x, label='normal')
plt.plot(x, 2* x, label='fast')
# 自动的寻找一个 最好的位置best()来放置图裂
plt.legend()
#%%
# 第二种创建图例的方法
x = np.linspace(0,10, 10)
plt.plot(x, 0.5 * x)
plt.plot(x, x)
plt.plot(x, 2* x)
# 自动的寻找一个 最好的位置best()来放置图裂
plt.legend(['_slow', 'normal', 'fast'])
#%% md
label参数为'_xxx',则图例中不显示
plt.plot(x, x*1.5, label = '_xxx')
#%% md
### loc参数
#%% md
| 字符串 | 数值 | 字符串 | 数值 |
| :-------------: |:-----------:| :-----:| :-----:|
| best | 0 | center left | 6 |
| upper right | 1 | center right | 7 |
| upper left | 2 | lower center | 8 |
| lower left | 3 | upper center | 9 |
| lower right | 4 | center | 10 |
| right | 5 |
#%%
x = np.linspace(0,10, 10)
# 图例名称不要以下划线开头
plt.plot(x, 0.5 * x, label='slow')
plt.plot(x, x, label='normal')
plt.plot(x, 2* x, label='fast')
# 自动的寻找一个 最好的位置best()来放置图裂
# plt.legend(loc='center left')
# loc = location
plt.legend(loc=(0.5,1))
#%% md
loc参数可以是2元素的元组,表示图例左下角的坐标
#%% md
图例也可以超过图的界限loc = (-0.1,0.9)
#%% md
### ncol参数
ncol控制图例中有几列
#%%
x = np.linspace(0,10, 10)
# 图例名称不要以下划线开头
plt.plot(x, 0.5 * x, label='slow')
plt.plot(x, x, label='normal')
plt.plot(x, 2* x, label='fast')
# 自动的寻找一个 最好的位置best()来放置图裂
# plt.legend(loc='center left')
# loc = location
plt.legend(loc=(0,1), ncol=3)
#%% md
### linestyle、color、marker
修改线条样式
![](4.png)
#%% md
### 保存图片
#%% md
figure.savefig的选项
+ filename
含有文件路径的字符串或Python的文件型对象。图像格式由文件扩展名推断得出,例如,.pdf推断出PDF,.png推断出PNG
(“png”、“pdf”、“svg”、“ps”、“eps”……)
+ dpi
图像分辨率(每英寸点数),默认为100
+ facecolor
图像的背景色,默认为“w”(白色)
#%%
figure = plt.figure()
x = np.linspace(0,10, 10)
# 图例名称不要以下划线开头
plt.plot(x, 0.5 * x, label='slow')
plt.plot(x, x, label='normal')
plt.plot(x, 2* x, label='fast')
# 自动的寻找一个 最好的位置best()来放置图裂
# plt.legend(loc='center left')
# loc = location
plt.legend(loc=(0,1), ncol=3)
figure.savefig('legend.jpg', dpi=500, facecolor='g')
#%% md
## 二、设置plot的风格和样式
plot语句中支持除X,Y以外的参数,以字符串形式存在,来控制颜色、线型、点型等要素,语法形式为:
plt.plot(X, Y, 'format', ...)
#%% md
### 点和线的样式
#%% md
#### 颜色
参数color或c
#%%
x = np.linspace(-1, 1, 100)
y = (1 - x **2) **0.5
plt.plot(x, y, x, -y, c=(0.1, 0.5, 0.7))
plt.axis('equal')
#%% md
##### 颜色值的方式
+ 别名
+ color='r'
+ 合法的HTML颜色名
+ color = 'red'
| 颜色 | 别名 | HTML颜色名 | 颜色 | 别名 |HTML颜色名|
| :-------------: |:---------:|:-----------:| :------:| :-----:| :-----:|
| 蓝色 | b | blue | 绿色 | g | green |
| 红色 | r | red | 黄色 | y | yellow |
| 青色 | c | cyan | 黑色 | k | black |
| 洋红色 | m | magenta | 白色 | w | white |
+ HTML十六进制字符串
+ color = '#eeefff'
+ 归一化到[0, 1]的RGB元组
+ color = (0.3, 0.3, 0.4)
#%% md
##### 透明度
alpha参数
#%%
x = np.linspace(-1, 1, 100)
y = (1 - x **2) **0.5
# 透明度是从0到1之间
plt.plot(x, y, x, -y, c='r', alpha=0.5)
plt.axis('equal')
#%% md
##### 背景色
设置背景色,通过plt.subplot()方法传入facecolor参数,来设置坐标轴的背景色
#%%
figure = plt.figure(facecolor='g')
x = np.linspace(-1, 1, 100)
y = (1 - x **2) **0.5
# 透明度是从0到1之间
plt.subplot(facecolor='r')
plt.plot(x, y, x, -y, c='k', alpha=0.5)
plt.axis('equal')
#%% md
#### 线型
参数linestyle或ls
#%% md
| 线条风格 | 描述 | 线条风格 | 描述 |
| :-------------: |:------------:| :----:| :-----:|
| '-' | 实线 | ':' | 虚线 |
| '--' | 破折线 | 'steps' | 阶梯线 |
| '-.' | 点划线 | 'None' / ',' | 什么都不画 |
#%%
x = np.linspace(-1, 1, 10)
y = (1 - x **2) **0.5
# 透明度是从0到1之间
plt.plot(x, y, x, -y, c='k', alpha=1, linestyle='steps')
plt.axis('equal')
#%% md
##### 线宽
linewidth或lw参数
#%%
x = np.linspace(-1, 1, 100)
y = (1 - x **2) **0.5
# 透明度是从0到1之间
plt.plot(x, y, x, -y, c='k', alpha=1, lw=4)
plt.axis('equal')
#%% md
##### 不同宽度的破折线
dashes参数
设置破折号序列各段的宽度
![](5.png)
#%%
plt.figure(figsize=(12,6))
x = np.linspace(0,2 * np.pi, 100)
y = np.sin(x)
plt.plot(x,y, dashes=[4, 2, 1, 3, 5, 2], lw=3)
#%% md
#### 点型
marker参数
#%% md
| 标记 | 描述 | 标记 | 描述 |
| :-------------: |:-----------:| :----:| :-----:|
| '1' | 一角朝下的三脚架 | '3' | 一角朝左的三脚架 |
| '2' | 一角朝上的三脚架 | '4' | 一角朝右的三脚架 |
#%%
x = np.linspace(0, 2*np.pi ,10)
y = np.sin(x)
plt.plot(x,y, marker='3', markersize=50)
#%% md
| 标记 | 描述 | 标记 | 描述 |
| :-------------: |:-----------:| :----:| :-----:|
| 's' | 正方形 | 'p' | 五边形 |
| 'h' | 六边形1 | 'H' | 六边形2 |
| '8' | 八边形 |
#%%
x = np.linspace(0, 2*np.pi ,10)
y = np.sin(x)
plt.plot(x,y, marker='H', markersize=30)
#%% md
| 标记 | 描述 | 标记 | 描述 |
| :-------------: |:-----------:| :----:| :-----:|
| '.' | 点 | 'x' | X |
| '\*' | 星号 | '+' | 加号 |
| ',' | 像素 |
#%%
x = np.linspace(0, 2*np.pi ,10)
y = np.sin(x)
plt.plot(x,y, marker='*', markersize=30)
#%% md
| 标记 | 描述 | 标记 | 描述 |
| :-------------: |:-----------:| :----:| :-----:|
| 'o' | 圆圈 | 'D' | 菱形 |
| 'd' | 小菱形 |'','None',' ',None| 无 |
#%%
x = np.linspace(0, 2*np.pi ,10)
y = np.sin(x)
plt.plot(x,y, marker='None', markersize=30)
#%% md
| 标记 | 描述 | 标记 | 描述 |
| :--------: |:----------:| :------:| :----:|
| '\_' | 水平线 | '|' | 水平线
![](6.png)
#%%
x = np.linspace(0, 2*np.pi ,10)
y = np.sin(x)
plt.plot(x,y, marker='|', markersize=30)
#%% md
| 标记 | 描述 | 标记 | 描述 |
| :-------------: |:-----------:| :----:| :-----:|
| 'v' | 一角朝下的三角形 | '<' | 一角朝左的三角形 |
| '^' | 一角朝上的三角形 | '>' | 一角朝右的三角形 |
#%%
x = np.linspace(0, 2*np.pi ,10)
y = np.sin(x)
plt.plot(x,y, marker='>', markersize=30)
#%% md
#### 多参数连用
颜色、点型、线型
#%%
x = np.linspace(0, 2*np.pi ,10)
y = np.sin(x)
plt.plot(x,y,c='r', ls='--', lw=2, alpha=0.6, marker='>', markersize=20)
#%%
x = np.linspace(0, 2*np.pi ,10)
y = np.sin(x)
# 只有颜色,点型,线型可以连用.
plt.plot(x,y, '>', lw=2, alpha=0.6, markersize=20)
#%% md
#### 更多点和线的设置
#%% md
| 参数 | 描述 | 参数 | 描述 |
| :-------------: |:-----------:| :-------------:| :------:|
| color或c | 线的颜色 | linestyle或ls | 线型 |
| linewidth或lw | 线宽 | marker | 点型 |
| markeredgecolor | 点边缘的颜色 | markeredgewidth | 点边缘的宽度 |
| markerfacecolor | 点内部的颜色 | markersize | 点的大小 |
![](7.png)
#%%
x = np.linspace(0, 10, 10)
plt.plot(x, '--r.', markersize=25, markeredgecolor='g', markeredgewidth=4, lw=2)
#%% md
#### 在一条语句中为多个曲线进行设置
#%% md
##### 多个曲线同一设置
属性名声明
plt.plot(x1, y1, x2, y2, fmt, ...)
#%%
# 关键词参数可以为多个曲线设置属性
plt.plot(x,y, x, x, c='r', marker='d', ls='--')
#%% md
##### 多个曲线不同设置
多个都进行设置时,无需声明属性
plt.plot(x1, y1, fmt1, x2, y2, fmt2, ...)
#%%
# 为对个曲线设置不同的属性,使用位置参数
plt.plot(x,y, 'r--d',
x, x, 'g-o)
#%% md
#### 三种设置方式
#%% md
##### 向方法传入关键字参数
#%%
plt.plot(x,y, c='r')
#%% md
##### 对实例使用一系列的setter方法
#%%
line, = plt.plot(x,y)
line.set_color('r')
line.set_marker('d')
line.set_linestyle('--')
#%% md
##### 使用setp()方法
#%%
line, = plt.plot(x,y)
plt.setp(line, 'color', 'r')
plt.setp(line, 'linestyle', '--')
#%% md
### X、Y轴坐标刻度
xticks()和yticks()方法
![](8.png)
#%%
x = np.linspace(0, 2*np.pi ,100)
y = np.sin(x)
plt.plot(x,y)
# 传刻度和刻度的标签
plt.xticks([0, np.pi/2, np.pi, 3*np.pi/2, 2*np.pi], ['0', '$\pi/2$', '$\\theta$', '$3\pi/2$', '2$\pi$'], fontsize=20)
plt.yticks()
#%% md
#### 面向对象方法
set_xticks、set_yticks、set_xticklabels、set_yticklabels方法
#%%
axes = plt.subplot()
axes.plot(x,y)
# 只能传刻度
axes.set_xticks([0, np.pi/2, np.pi, 3*np.pi/2, 2*np.pi])
# 刻度的标签需要使用axes.set_xticklabels
axes.set_xticklabels(['0', '$\pi/2$', '$\\theta$', '$3\pi/2$', '2$\pi$'])
#%% md
#### 正弦余弦
LaTex语法,用$\pi$等表达式在图表上写上希腊字母
![](9.png)
#%% md
## 三、2D图形
#%% md
### 直方图
【直方图的参数只有一个x!!!不像条形图需要传入x,y】
hist()的参数
+ bins
可以是一个bin数量的整数值,也可以是表示bin的一个序列。默认值为10
+ density
如果值为True,直方图的值将进行归一化处理,形成概率密度,默认值为False
+ color
指定直方图的颜色。可以是单一颜色值或颜色的序列。如果指定了多个数据集合,颜色序列将会设置为相同的顺序。如果未指定,将会使用一个默认的线条颜色
+ orientation
通过设置orientation为horizontal创建水平直方图。默认值为vertical
#%%
n
#%%
n = np.random.randint(0, 10,size=10)
n
# 直方图颜色不能 简写
plt.hist(n, bins=50, density=True, color='r', orientation='horizontal')
#%% md
### 条形图
【条形图有两个参数x,y!】
bar()、barh()
#%%
n
#%%
n.ndim. n.shape, n.dtype. n.size. 没有n.index
#%%
# 必须传x,y,不能 省
plt.bar(np.arange(0,10), n, width=0.5, color='r' )
#%%
plt.barh(np.arange(0,10), n, height=0.5, color='r' )
#%% md
#### 水平条形图
barh()
#%% md
### 饼图
【饼图也只有一个参数x!】
pie()
饼图适合展示各部分占总体的比例,条形图适合比较各部分的大小
#%%
#%% md
普通各部分占满饼图
#%%
n = [1,2,3,4]
plt.pie(n)
#%%
# 传递比例就会严格按照传递的比例来显示饼状图
n = [0.1, 0.3, 0.5, 0.1]
plt.pie(n)
#%% md
普通未占满饼图
#%%
n = [0.1, 0.2, 0.5, 0.1]
plt.pie(n)
#%%
plt.figure(figsize=(8,8))
n = [0.1, 0.2, 0.4, 0.3]
_ = plt.pie(n, autopct='%.2f%%', explode=[0.1, 0.2, 0.3, 0.4], shadow=True, labels=list('ABCD'), labeldistance=0.8, pctdistance=1.1,
colors=['r','g', 'b', 'm'], startangle=60, textprops=dict(size=20))
#%% md
饼图阴影、分裂等属性设置
#labels参数设置每一块的标签;labeldistance参数设置标签距离圆心的距离(比例值)
#autopct参数设置比例值的显示格式(%1.1f%%);pctdistance参数设置比例值文字距离圆心的距离
#explode参数设置每一块顶点距圆形的长度(比例值);colors参数设置每一块的颜色;
#shadow参数为布尔值,设置是否绘制阴影
#%% md
startangle设置旋转角度
#%% md
### 散点图
【散点图需要两个参数x,y,但此时x不是表示x轴的刻度,而是每个点的横坐标!】
scatter()
![](10.png)
#%%
x = np.linspace(0,10, 10)
y = np.sin(x)
plt.scatter(x, y, s=100, color='r', marker='d', )
#%%
x = np.random.randn(1000)
y = np.random.randn(1000)
#%%
plt.figure(figsize=((10,8)))
plt.scatter(x,y, marker='d', s=np.random.randint(0,150, 200), color=np.random.rand(1000,4))
#%% md
## <font color = red>四、图形内的文字、注释、箭头(自学)</font>
#%% md
控制文字属性的方法:
| Pyplot函数 | API方法 | 描述 |
| :-------------: |:------------------------------:| :---------------------------------:|
| text() | mpl.axes.Axes.text() | 在Axes对象的任意位置添加文字 |
| xlabel() | mpl.axes.Axes.set_xlabel() | 为X轴添加标签 |
| ylabel() | mpl.axes.Axes.set_ylabel() | 为Y轴添加标签 |
| title() | mpl.axes.Axes.set_title() | 为Axes对象添加标题 |
| legend() | mpl.axes.Axes.legend() | 为Axes对象添加图例 |
| figtext() | mpl.figure.Figure.text() | 在Figure对象的任意位置添加文字 |
| suptitle() | mpl.figure.Figure.suptitle() | 为Figure对象添加中心化的标题 |
| annnotate() | mpl.axes.Axes.annotate() | 为Axes对象添加注释(箭头可选) |
所有的方法会返回一个matplotlib.text.Text对象
#%% md
### 图形内的文字
text()
![](14.png)
#%%
x = np.linspace(0, 7, 100)
y = np.sin(x)
plt.plot(x,y)
# text在坐标系内添加文本说明
plt.text(0+0.1,0, 'sin(0)=0')
#%% md
使用figtext()
#%%
x = np.linspace(0, 7, 100)
y = np.sin(x)
# plt.subplot(facecolor='g')
plt.figure(facecolor='g')
plt.plot(x,y)
# text在坐标系内添加文本说明
plt.text(0+0.1,0, 'sin(0)=0')
# figtext使用相对坐标
plt.figtext(0.5, 0.5, 'sin($\pi$)=0')
#%% md
### 注释
annotate()
xy参数设置箭头指示的位置,xytext参数设置注释文字的位置
arrowprops参数以字典的形式设置箭头的样式
width参数设置箭头长方形部分的宽度,headlength参数设置箭头尖端的长度,
headwidth参数设置箭头尖端底部的宽度,
facecolor设置箭头颜色
shrink参数设置箭头顶点、尾部与指示点、注释文字的距离(比例值)
![](15.png)
#%%
n = [14, 11, 14,13,14,10, 30, 12, 11, 14, 13, 13, 12, 13]
plt.plot(n)
plt.ylim(ymax=35)
# width The width of the arrow in points
# headwidth The width of the base of the arrow head in points
# headlength The length of the arrow head in points
# shrink Fraction of total length to shrink from both ends
plt.annotate('This spot must really\n mean something',(6,30), (8,32), arrowprops=dict(width=20, headwidth=25, headlength=20, color='k', shrink=0.1))
#%% md
练习
三个随机正太分布数据
![](16.png)
设置图例
bbox_to_anchor,ncol mode,borderaxespad
设置注解 arrowstyle
#%%
n1 = np.random.normal(loc=10, scale=3, size=100)
n2 = np.random.normal(loc=20, scale=2, size=100)
n3 = np.random.normal(loc=30, scale=4, size=100)
#%%
plt.plot(n1, label='plot')
plt.plot(n2, label='2nd plot')
plt.plot(n3, label='3rd plot')
# plt.legend(loc=(0,1.05), ncol=3, mode='expand', borderaxespad=0)
plt.legend(loc=(0,1.05), ncol=3, mode='expand', borderaxespad=0, bbox_to_anchor=[0,1,1,0.05])
# ['-', '->', '-[', '<-', '<->', 'fancy', 'simple', 'wedge']
plt.annotate('Important value', (54, 22.5), (20, 40), arrowprops=dict(arrowstyle='<->'))
#%% md
### 箭头
箭头的样式,没必要记
#%%
plt.figure(figsize=(12,9))
plt.axis([0, 10, 0, 20]);
arrstyles = ['-', '->', '-[', '<-', '<->', 'fancy', 'simple', 'wedge']
for i, style in enumerate(arrstyles):
plt.annotate(style, xytext=(1, 2+2*i), xy=(4, 1+2*i), arrowprops=dict(arrowstyle=style));
connstyles=["arc", "arc,angleA=10,armA=30,rad=30", "arc3,rad=.2", "arc3,rad=-.2", "angle", "angle3"]
for i, style in enumerate(connstyles):
plt.annotate(style, xytext=(6, 2+2*i), xy=(8, 1+2*i), arrowprops=dict(arrowstyle='->', connectionstyle=style));
plt.show()
#%% md
## <font color = red>五、3D图(自学)</font>
#%% md
#### 曲面图
![](11.png)
#%% md
导包
from mpl_toolkits.mplot3d.axes3d import Axes3D
#%%
from mpl_toolkits.mplot3d.axes3d import Axes3D
#%%
plt.subplot(projection='3d')
#%%
# get current axes
plt.gca(projection='3d')
#%% md
生成数据
#%%
Z = X + Y + C
#%%
x, y = [1,2,3], [2,3,4]
np.meshgrid(x, y)
#%%
x, y = np.linspace(0, 7, 100), np.linspace(0,7, 100)
X, Y= np.meshgrid(x,y)
#%%
# 三维图形的方程
Z = np.sin(X) + np.cos(Y) + 2
#%% md
绘制图形
#%%
axes = plt.subplot(projection='3d')
axes.plot_surface(X, Y, Z)
#%%
plt.figure(figsize=(2*8,8))
axes1 = plt.subplot(1,2,1, projection='3d')
axes1.plot_surface(X, Y, Z)
axes2 = plt.subplot(1,2,2, projection='3d')
axes2 = axes2.plot_surface(X, Y, Z, cmap='rainbow')
# shrink长宽一起缩放
plt.colorbar(axes2, shrink=0.5)
#%% md
## <font color = red>玫瑰图/极坐标条形图(自学)</font>
![](13.png)
#%% md
创建极坐标条形图
#%%
plt.figure(figsize=(8,8))
plt.subplot(projection='polar', facecolor='g')
plt.bar()
#%%
ravenna = np.load('./Ravenna_wind.npy')
ravenna
#%% md
使用np.histogram计算一组数据的直方图
#%%
data, data_range = np.histogram(ravenna, range=[0,360], bins=8)
#%%
plt.figure(figsize=(8,8))
plt.subplot(projection='polar', facecolor='g')
plt.bar(data_range, data, width=1)
#%%
data
#%%
data_range
#%%
data_range = np.arange(0, 2*np.pi, 2*np.pi/8)
data_range
#%%
plt.figure(figsize=(8,8))
plt.subplot(projection='polar', facecolor='g')
plt.bar(data_range, data, color=np.random.rand(8,3), width=2*np.pi/8)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。