不百度画出好看的图
🤔你受够了每次使用matplotlib都离不开baidu/google/bing的生活了吗?
弄懂plt.***
和ax.***
的区别
在matplotlib中,有两种画图方式:
plt.figure()
fig, ax = plt.subplots()
第一种其实是取了一个捷径,这是通过matplotlib提供的一个api,这个plt提供了很多基本的function可以让你很快的画出图来。但是正因为这个简便性,网上大部分教程都是基于第一种方法的,让很多人以为matplotlib的功能仅限于此,但是偶尔遇到第二种绘画方式就会让人摸不着头脑。在此十分感谢知乎上的一个回答:__matplotlib:先搞明白plt. /ax./ fig再画__。
如果想要更细致的精调,就要使用第二种方法。__第二种方法是最正统的__。
1 | fig, ax = plt.subplots() |
官网提供了一张图说明白一张图的各种组件指什么。
- Figure:这个很好理解,就是一张画布。
- Axes:首先,这个不是Axis,不是坐标轴!!而是放在画布上的各种物体!!
- Axis:这个才是坐标轴……
知道了这些部分,就能大致看懂为什么可以使用ax.plot()
绘画了,实际上这里的ax就是axes。
那么使用最正统方法绘制图的流程是什么样的呢?
首先创建一个画布
1
fig, ax = plt.subplots()
如果subplots里给定了axes的数量,那么得到的ax也就是一个数组了。
1
2
3fig, ax = plt.subplots(2,1) # 创建多个绘画对象
ax[0].***
ax[1].***在axes上画数据
这里实际上操作axes,不同的ax互不干扰,可以选择画任何类型的图,可以参考“图像类型”。
当然如果要让多条曲线出现在同一个ax上,那么多次用该ax绘画即可。
1
2ax.plot(x,y)
ax.plot(y,x)细节处理
细节也可以在axes上进行设定,一张图上有哪些组件可以参考“参数关键字”。一般来说就是设定横纵坐标,添加图例等。
1
2ax.set_title("title")
ax.legend()展示图片
最后一步可以用fig把所有的对象打印粗来了。
1
fig.show()
图像类型
至于画什么要用到啥,看这个:50种常用的matplotlib可视化,再也不用担心模型背着我乱跑了
类型 | 调用API |
---|---|
坐标图 | plt.plot(x, y, fmt) |
箱形图 | plt.boxplot(data, notch, position) |
条形图 | plt.bar(left, height, width, bottom) |
横向条形图 | plt.barh(width, bottom, left, height) |
极坐标图 | plt.polar(theta, r) |
功率密度图 | plt.psd(x, NFFT=256, pad_to, Fs) |
谱图 | plt.specgram(x, NFFT=256, pad_to, F) |
X-Y 相关性函数 | plt.cohere(x, y, NFFT=256, FS) |
散点图 | plt.scatter(x, y) |
步阶图 | plt.step(x, y, where) |
直方图 | plt.hist(x, bins, normed) |
等值图 | plt.contour(X, Y, Z, N) |
垂直图 | plt.vlines() |
柴火图 | plt.stem(x, y, linefmt, markerfmt) |
数据日期 | plt.plot_date() |
参数关键字
如果要绘制一个更加精细的图片,往往需要修改各种参数,下面这张图说的就是这些参数的关键字。
绘画风格
绘画风格
使用控制曲线的格式字符串,可以绘制可视化效果更佳的图。可选颜色字符、风格字符和标记字符。
颜色字符
颜色字符 | 说明 | 颜色字符 | 说明 |
---|---|---|---|
b | 蓝色 | g | 绿色 |
r | 红色 | c | 青绿色 cyan |
m | 洋红色 magenta | y | 黄色 |
k | 黑色 | w | 白色 |
#008000 | 可以使用RGB颜色 | 0.8 | 灰度值 |
风格字符
风格字符 | 说明 |
---|---|
- |
实线 |
-- |
破折线 |
-. |
点划线 |
: |
虚线 |
标记字符
标记字符 | 说明 | 标记字符 | 说明 |
---|---|---|---|
. |
点 | , |
像素标记(极小点) |
o |
实心圆 | v |
倒三角 |
^ |
上三角 | > |
左三角 |
< |
右三角 | 1 |
下花三角 |
2 |
上花三角 | 3 |
左花三角 |
4 |
右花三角 | s |
实心方形 |
p |
实心五角 | * |
星形 |
h |
竖六边形 | H |
横六边形 |
+ |
十字 | x |
x标记 |
d |
瘦菱形 | D |
菱形 |
` | ` | 垂直线 |
其他细节
中文支持
matplotlib的默认设置并不支持中文,在有中文输出的地方,需要更改一下字体,需要一个属性:fontproperties
1 | ax.xlabel("时间", fontproperties="SimHei", fontsize=20) |
绘制3D图像
绘制3D需要用到Axes3D,例子如下:
1 | import matplotlib.pyplot as plt |
读取二进制图像
matplotlib似乎没有相关的api可以用来读取二进制图像,但是很多时候却经常要用到二进制格式的图像,这个时候需要使用其他方法来处理二进制数据
方法1.1——使用io模块
1 | from io import BytesIO |
方法1.2——还是使用io模块
1 | buffer = io.BytesIO() |
方法2——使用numpy
1 | import matplotlib.pyplot as plt |
用matplotlib绘制简单的动画
用matplotlib绘制3d图像的一些例子(动图):使用Matplotlib绘制3D图形-制作动图