matplotlib的使用
1.使用matplotlib.pyplot将几个子图画在一幅图中
1.1 matplotlib.pyplot(plt)程序
各二维子图的值均为np.random.random产生的随机数。
import numpy as np
import matplotlib.pyplot as plt
import os
fig, axs = plt.subplots(nrows=2, ncols=2, figsize=(8, 8))
for i in range(2):
for j in range(2):
axs[i, j].scatter(np.random.random((100)), np.random.random((100)),c=np.random.randint(1,4,(100)),s=1)
axs[i, j].set_title(str(i*2+j))
plt.tight_layout()
plt.savefig( "D:\\"+str(i*2+j))
plt.show()
1.2 结果
在D:\下生成图片3.png,其由4个子图组成,sub_title分别为0~3。
2.设置plt图中x,y坐标单位长度相同
plt.gca().set_aspect(‘equal’)
示例:
3.不显示坐标轴、刻度、边框
import matplotlib.pyplot as plt
from matplotlib.ticker import NullLocator
import numpy as np
x=np.random.random((1000,2))
y=np.random.randint(0,255,(1000,))
plt.scatter(x[:,0],x[:,1],s=1,c=y)
plt.axis("off")
plt.gca().xaxis.set_major_locator(NullLocator())
plt.gca().yaxis.set_major_locator(NullLocator())
plt.show()
效果如下:
4.Matplotlib rcParams
4.1 画图中设置title的中文支持
在使用Matplotlib.pyplot画图过程中,有时需要设置中文标题,如:
axs[0].set_title(u"标题1")
。
这时候标题的位置会默认显示“□□□”。
为了将中文字体显示出来,需要进行一些设置:
plt.rcParams['font.sans-serif'] = ['KaiTi']
plt.rcParams['font.serif'] = ['KaiTi']
这里的’KaiTi’,即设置为楷体字体。参考CSS 中文字体的英文名称1:
华文细黑:STHeiti Light [STXihei]
华文黑体:STHeiti
华文楷体:STKaiti
华文宋体:STSong
华文仿宋:STFangsong
俪黑 Pro:LiHei Pro Medium
俪宋 Pro:LiSong Pro Light
标楷体:BiauKai
苹果俪中黑:Apple LiGothic Medium
苹果俪细宋:Apple LiSung Light
Windows的一些:
新细明体:PMingLiU
细明体:MingLiU
标楷体:DFKai-SB
黑体:SimHei
宋体:SimSun
新宋体:NSimSun
仿宋:FangSong
楷体:KaiTi
仿宋_GB2312:FangSong_GB2312
楷体_GB2312:KaiTi_GB2312
微软正黑体:Microsoft JhengHei
微软雅黑体:Microsoft YaHei
装Office会生出来的一些:
隶书:LiSu
幼圆:YouYuan
华文细黑:STXihei
华文楷体:STKaiti
华文宋体:STSong
华文中宋:STZhongsong
华文仿宋:STFangsong
方正舒体:FZShuTi
方正姚体:FZYaoti
华文彩云:STCaiyun
华文琥珀:STHupo
华文隶书:STLiti
华文行楷:STXingkai
华文新魏:STXinwei
如果显示中文标题后,数字中“-“号无法显示,可以设置:
```python
matplotlib.rcParams['axes.unicode_minus'] =False
4.2 font.family
Matplotlib 的font具有以下五个属性:
- ‘serif’ (e.g., Times),
- ‘sans-serif’ (e.g., Helvetica),
- ‘cursive’ (e.g., Zapf-Chancery),
- ‘fantasy’ (e.g., Western), and
- ‘monospace’ (e.g., Courier).
那么分别代表什么意思呢,可参考2:
※Serif:在字的笔划开始及结束的地方有额外的装饰,而且笔划的粗细会因直横的不同而有不同。
※Sans Serif则没有这些额外的装饰。
如:
※Monospace:等宽字体
※Cursive书写体:相当于印刷学中的手写体。中文的华文行草就是这样的一个字体。