1. Matplotlib的简介和安装
- Matplotlib是Python的绘图库。它可与Numpy一起使用,提供了一种有效的MatLab开源替代方案。它也可以和图形工具包一起使用,如PyQt和wxPython。
- pip安装Matplotlib:
pip install matplotlib -i https://pypi.tuna.tsinghua.edu.cn/simple
- Linux系统也可以使用Linux包管理器来安装:
- Debain/Ubantu:
sudo apt-get install python-matplotlib
- Fedora/Redhat:
sudo yum install python-matplotlib
- 安装完后,你可以使用下面命令来查看是否安装了matplotlib模块:
python -m pip list
# 或直接
pip list
2. Matplotlib的简单使用
1. 简单实例
import numpy as np
from matplotlib import pyplot as plt
x = np.arange(1, 11)
y = 2 * x + 5
plt.title("Matplotlib demo")
plt.xlabel("x axis caption")
plt.ylabel("y axis caption")
plt.plot(x, y)
plt.show()
运行结果:
- 以上示例中,np.arange()函数创建x轴上的值。y轴上的对应值存储在另一个数组对象y中。这些值使用matplotlib软件包的pyplot子模块的plot()函数绘制。
- 图形由show()函数显示。
2. 图形上显示中文(下载字体)
-
Matplotlib默认情况不支持中文,我们可以使用以下简单的方法来解决。
-
这里我们使用思源黑体,思源黑体是Adobe与Google推出的一款开源字体。
-
GitHub地址:https://github.com/adobe-fonts/source-han-sans/tree/release/OTF/SimplifiedChinese
选一个下载即可:
-
网盘下载: https://pan.baidu.com/s/10-w1JbXZSnx3Tm6uGpPGOw 提取码:yxqu
-
可以下载个OTF字体,比如SourceHanSansSC-Bold.otf,将该文件放在当前执行的代码文件中:
import numpy as np
from matplotlib import pyplot as plt
import matplotlib
# fname为下载的字体库路径,注意是SourceHanSansSC-Bold.otf字体的路径
zhfont1 = matplotlib.font_manager.FontProperties(fname="SourceHanSansSC-Bold.otf")
x = np.arange(1, 11)
y = 2 * x + 5
plt.title("测试", fontproperties=zhfont1)
# fontproperties设置中文显示。fontsize设置字体大小
plt.xlabel("x轴", fontproperties=zhfont1)
plt.ylabel("y轴", fontproperties=zhfont1)
plt.plot(x, y)
plt.show()
运行效果如下:
- 此外,我们还可以使用系统的字体。
3. 图形上显示中文(使用系统字体)
from matplotlib import pyplot as plt
import matplotlib
a = sorted([f.name for f in matplotlib.font_manager.fontManager.ttflist])
for i in a: # 查看都有哪些系统字体
print(i)
# 以上代码可以打印出font_manager的ttflist中所有的注册的名字,找一个看中文字体,例如:STFangsong(仿宋),然后设置下面的系统字体:
plt.rcParams['font.family']=['STFangsong'] # 使用系统的字体——仿宋
# 修改上一示例的代码:
import numpy as np
x = np.arange(1, 11)
y = 2 * x + 5
plt.title("测试")
# fontproperties设置中文显示。fontsize设置字体大小
plt.xlabel("x轴")
plt.ylabel("y轴")
plt.plot(x, y)
plt.show()
运行结果如下:
4. 可向plot()函数添加的格式化字符
- 作为线形图的替代,可以通过向plot()函数添加格式化字符串来显示离散值。可以使用以下格式化字符:
字符 | 描述 |
---|---|
‘-’ | 实线样式 |
‘–’ | 短横线样式 |
‘-.’ | 点划线样式 |
‘:’ | 虚线样式 |
‘.’ | 点标记 |
‘,’ | 像素标记 |
‘o’ | 圆标记 |
‘v’ | 倒三角标记 |
‘^’ | 正三角标记 |
‘<’ | 左三角标记 |
‘>’ | 右三角标记 |
‘1’ | 下箭头标记 |
‘2’ | 上箭头标记 |
‘3’ | 左箭头标记 |
‘4’ | 右箭头标记 |
‘s’ | 正方形标记 |
‘p’ | 五边形标记 |
‘*’ | 星形标记 |
‘h’ | 六边形标记1 |
‘H’ | 六边形标记2 |
‘+’ | 加号标记 |
‘x’ | X标记 |
‘D’ | 菱形标记 |
‘d’ | 窄菱形标记 |
‘|’ | 竖直线标记 |
‘_’ | 水平线标记 |
5. 颜色的缩写
字符 | 颜色 |
---|---|
‘b’ | 蓝色 |
‘g’ | 绿色 |
‘r’ | 红色 |
‘c’ | 青色 |
‘m’ | 品红色 |
‘y’ | 黄色 |
‘k’ | 黑色 |
‘w’ | 白色 |
6. 用点替换线条
- 要显示圆来代表点,而不是上面示例中的线,需要使用ob作为plot()函数中的格式字符串。
import numpy as np
from matplotlib import pyplot as plt
x = np.arange(1, 11)
y = 2 * x + 5
plt.title("Matplotlib demo")
plt.xlabel("x axis caption")
plt.ylabel("y axis caption")
plt.plot(x, y, "ob")
plt.show()
运行结果如下:
7. 绘制正弦波
- 以下示例使用matplotlib生成正弦波图。
import numpy as np
import matplotlib.pyplot as plt
# 计算正弦曲线上点的x和y坐标
x = np.arange(0, 3 * np.pi, 0.1)
y = np.sin(x)
plt.title("sine wave form")
# 使用matplotlib来绘制点
plt.plot(x, y)
plt.show()
运行结果如下:
8. subplot()
- subplot()函数允许你在同一图中绘制不同的东西。
示例:绘制正弦和余弦值
# 绘制正弦和余弦
import numpy as np
import matplotlib.pyplot as plt
# 计算正弦和余弦曲线上的点的x和y坐标
x = np.arange(0, 3 * np.pi, 0.1)
y_sin = np.sin(x)
y_cos = np.cos(x)
# 建立subplot网格,高为2,宽为1
# 激活第一个subplot
plt.subplot(2, 1, 1)
# 绘制第一个图像
plt.plot(x, y_sin)
plt.title('Sine')
# 将第二个subplot激活,并绘制第二个图像
plt.subplot(2, 1, 2)
plt.plot(x, y_cos)
plt.title('Cosine')
# 展示图像
plt.show()
运行结果:
9. bar()
- pyplot子模块提供bar()函数来生成条形图。
- 以下示例生成两组x和y的条形图。
from matplotlib import pyplot as plt
x = [5, 8, 10]
y = [12, 16, 6]
x2 = [6, 9, 11]
y2 = [6, 15, 7]
plt.bar(x, y, align='center')
plt.bar(x2, y2, color='g', align='center')
plt.title('Bar graph')
plt.ylabel('Y axis')
plt.xlabel('X axis')
plt.show()
运行结果如下:
10. numpy.histogram()
- numpy.histogram()函数是数据的频率分布的图形表示。水平尺寸相等的矩形对应于类间隔,称为bin,变量height对应于频率。
- numpy.histogram()函数将输入数组和bin作为两个参数。bin数组中的连续元素用作每个bin的边界。
import numpy as np
a = np.array([22, 87, 5, 43, 56, 73, 55, 54, 11, 20, 51, 5, 79, 31, 27])
np.histogram(a, bins=[0, 20, 40, 60, 80, 100])
hist, bins = np.histogram(a, bins=[0, 20, 40, 60, 80, 100])
print(hist)
print(bins)
运行结果:
[3 4 5 2 1]
[ 0 20 40 60 80 100]
11. plt()
- matplotlib可以将直方图的数字表示转换为图形。pyplot子模块的plt()函数将包含数据和bin数组作为参数,并转换为直方图。
from matplotlib import pyplot as plt
import numpy as np
a = np.array([22, 87, 5, 43, 56, 73, 55, 54, 11, 20, 51, 5, 79, 31, 27])
plt.hist(a, bins=[0, 20, 40, 60, 80, 100])
plt.title("histogram")
plt.show()
运行结果:
参考文章:
https://www.runoob.com/numpy/numpy-matplotlib.html
更多教程:
https://www.runoob.com/matplotlib/matplotlib-tutorial.html