当前位置:   article > 正文

python:matplotlib基础(1)_plot只能画点的线性

plot只能画点的线性

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)

 

 

 

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号