# matplotlib
# 参考
# 全局配置/配置
# 配置文件目录
mpl.get_configdir()
# 配置文件完整路径
mpl.matplotlib_fname()
# 动态参数列表
plt.rcParams # 是一个字典类型 可以直接修改和查看
# 使用函数配置
mpl.rc('lines',linewidth=2)
plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文
plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
# 控制风格
>>> plt.style.available
['bmh',
'classic',
'dark_background',
'fast',
'fivethirtyeight',
'ggplot',
'grayscale',
'seaborn-bright',
'seaborn-colorblind',
'seaborn-dark-palette',
'seaborn-dark',
'seaborn-darkgrid',
'seaborn-deep',
'seaborn-muted',
'seaborn-notebook',
'seaborn-paper',
'seaborn-pastel',
'seaborn-poster',
'seaborn-talk',
'seaborn-ticks',
'seaborn-white',
'seaborn-whitegrid',
'seaborn',
'Solarize_Light2',
'tableau-colorblind10',
'_classic_test']
# 保存图形
# 使用savefig()方法以保存图形
fig.savefig('d:/my_fig.png')
plt.savefig('image_name.png', dpi=600,bbox_inches='tight') #定制化
# 显示文件内的图像
from IPython.display import Image
Image('./my_fig.png') # pycharm未显示
# savefig()
# 参数说明
fname:文件路径或文件对象,根据扩展名推断文件格式
dpi:分辨率,默认100
format: 指定文件格式
bbox_inches: 要保存的图片范围。‘tight’表示去掉周边空白。
facecolor:子图之外的背景颜色,默认白色
edgecolor:边界颜色
# 两个接口
# MATLAB 接口-pyplot
用作 matlab 的替代品
x = np.linspace(0,10,100) # 生成点列表
plt.figure() # 创建图形
plt.subplot(2,1,1) # 行、列、子图编号
plt.plot(x,np.sin(x))
plt.subplot(2,1,2)
plt.plot(x,np.cos(x)) # 第二个子图
# 面向对象接口
fig, ax = plt.subplots(2) # ax是包含两个Axes对象的数组
ax[0].plot(x,np.sin(x)) # 在每个对象上调用plot()方法
ax[1].plot(x,np.cos(x))
# 线形图plot
方法核心是 plot(x,y),当只提供 y 的时候则 x 默认使用 0-n 的整数序列。
# 散点图scatter,plot
# plot 对于每一个点使用同一配置,点数多时效率更高
plt.plot(x,y,‘bo’)
# sactter 对于每一个点单独配置
plt.scatter(x,y,marker='o')
# scatter 参数
x,y:输入数据
s:标记大小,以像素为单位
c:颜色
marker:标记
alpha:透明度
linewidths:线宽
edgecolors :边界颜色
# 直方图hist
np.random.seed(2019)
# 创建数据
mu = 100 # 分布的均值
sigma = 15 # 分布标准差
x = mu + sigma * np.random.randn(400) # 生成400个数据
num_bins = 50 # 分50组
plt.hist(x, num_bins, density=1, )
plt.xlabel('Smarts')
plt.ylabel('Probability density')
plt.title(r'Histogram of IQ: $\mu=100$, $\sigma=15$')
# 条形图bar
n = 12 # 12组数据
X = np.arange(n)
Y1 = (1 - X / n) * np.random.uniform(0.5, 1.0, n) # 生成对应的y轴数据
Y2 = (1 - X / n) * np.random.uniform(0.5, 1.0, n)
plt.bar(X, +Y1, facecolor='#9999ff', edgecolor='white') # +号让所有y值变成正数
plt.bar(X, -Y2, facecolor='#ff9999', edgecolor='white') # 负号让所有y值变成复数
# 加上数值
for x, y in zip(X, Y1): # 显示文本
plt.text(x, y + 0.05, '%.2f' % y, ha='center', va='bottom')
for x, y in zip(X, Y2):
plt.text(x, -y - 0.05, '-%.2f' % y, ha='center', va='top')
plt.xlim(-0.5, n)
plt.ylim(-1.25, 1.25)
# 饼图pie
labels = '狗', '猫', '青蛙', '乌龟'
sizes = [15, 30, 45, 10]
explode = (0, 0.1, 0, 0)
plt.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%',
shadow=True, startangle=90)
plt.axis('equal') # 设置x轴和y轴均等
# pie 参数
x:输入的数据数组
explode:数组,可选参数,默认为None。 用来指定每部分从圆中外移的偏移量。 例如:explode=[0,0.2,0,0],第二个饼块被拖出。
labels:每个饼块的标记
colors:每个饼块的颜色
autopct:自动标注百分比,并设置字符串格式
shadow:是否添加阴影。
labeldistance:被画饼标记的直径。
startangle:从x轴逆时针旋转饼图的开始角度。
radius:饼图的半径
counterclock:指定指针方向,顺时针或者逆时针。
center:图表中心位置。
# 线型颜色和标记
## 常用颜色
蓝色: 'b' (blue)
绿色: 'g' (green)
红色: 'r' (red)
蓝绿色(墨绿色): 'c' (cyan)
红紫色(洋红): 'm' (magenta)
黄色: 'y' (yellow)
黑色: 'k' (black)
白色: 'w' (white)
## 常用线型
实线:solid(- )
虚线:dashed(--)
点划线:dashdot(-.)
实点线:dotted(:)
## 常用标记
'.' 实点标记
',' 像素标记
'o' 圆形标记
'v' 向下三角符号
'^' 向上三角符号
'D' 钻石形状
'd' 菱形
##使用
plt.plot(x, x + 2, '-.k*') # 黑色点划线星型标记
# 误差线
x = np.linspace(0,10,50)
dy=0.8
y = np.sin(x) + dy*np.random.randn(50)
plt.errorbar(x, y, yerr=dy, fmt='.k')
# 参数说明
yerr: 绘制垂直方向的误差线
xerr:绘制水平方向的误差线
fmt: 线条格式
ecolor: 误差线的颜色
elinewidth:误差线的宽度
capsize: 误差线的长度
# 等高线
plt.contour: 绘制等高线
plt.contourf: 绘制带有填充色的等高线
plt.imshow: 显示图形
# 当图形中只使用一种颜色的时候,就会用虚线来表示复数,实线来表示正数
plt.contour(X, Y, Z, colors='blue')
# 或者使用一个颜色条用不同的颜色表示等高线
plt.contour(X, Y, Z, cmap='RdGy')
plt.colorbar()
# 使用plt.cm.<tab>可以查看有其他配色方案
# 使用imshow方法,将二维数组渲染成渐变图
plt.imshow(Z, extent=[0,5,0,5], origin='lower',cmap='RdGy')
plt.colorbar()
# 使用clabel方法,将一幅背景半透明的彩色图与另一幅坐标相同、带数据标签的等高线叠放在一起
contours = plt.contour(X,Y,Z,3,colors='black') # 分3级
plt.clabel(contours,inline=True, fontsize=8) # 内部带数值文字
plt.colorbar()
# 多子图
# 手动设置
# 通过plt.axes函数可以创建基本子图,默认情况下它会创建一个标准的坐标轴,并填满整张图。
ax1 = plt.axes() # 使用默认配置,也就是布满整个画布
ax2 = plt.axes([0.65,0.65,0.2,0.2]) # 在右上角指定位置
# 面向对象
fig = plt.figure()
ax1 = fig.add_axes([0.1,0.5,0.8,0.4],xticklabels=[],ylim=(-1.2,1.2))
ax2 = fig.add_axes([0.1,0.1,0.8,0.4],ylim=(-1.2,1.2))
x = np.linspace(0,10)
ax1.plot(np.sin(x))
ax2.plot(np.cos(x))
# subplot()
for i in range(1, 7):
plt.subplot(2,3,i) # 索引从1开始
plt.text(0.5,0.5,str((2,3,i)), fontsize=16, ha='center')
# 面向对象
fig = plt.figure()
fig.subplots_adjust(hspace=0.4, wspace=0.4)
for i in range(1,7):
ax = fig.add_subplot(2,3,i)
ax.text(0.5,0.5,str((2,3,i)), fontsize=16, ha='center')
# 快速创建多子图
# 通过sharex和sharey参数,自动地去掉了网格内部子图的坐标刻度等内容,实现共享,让图形看起来更整齐整洁。
fig, ax = plt.subplots(2,3,sharex='col', sharey='row') # 索引从0开始
# GridSpec 复杂网格
grid = plt.GridSpec(2,3,wspace=0.4,hspace=0.4) # 生成两行三列的网格
plt.subplot(grid[0,0]) # 将0,0的位置使用
plt.subplot(grid[0,1:]) # 同时占用第一行的第2列以后的位置
plt.subplot(grid[1,:2])
plt.subplot(grid[1,2])
# 绘制图形对象 patch
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
# 注意下面三种形状的参数提供方式
rect = plt.Rectangle((0.2,0.75),0.4,0.15,alpha=0.3,color='b')
circ = plt.Circle((0.7,0.2), 0.15,)
pgon = plt.Polygon([[0.15,0.15],[0.35,0.4],[0.2,0.6]])
ax.add_patch(rect)
ax.add_patch(circ)
ax.add_patch(pgon)
# 设置坐标上下限 xlim(), ylim()和 axis()
# plt.xlim(xmin, xmax)
plt.xlim(0, 10)
plt.ylim(0, 10)
# plt.axis([xmin, xmax, ymin, ymax])
# 注意传入的y轴数据可能会因为x轴的实际取值而被覆盖
plt.axis([0, 10, 0, 10]) # -> 实际上y轴显示为[-1000,1000]
# axis 设置更多
off:隐藏轴线和标签
tight:紧缩模式
equal:以1:1的格式显示,x轴和y轴的单位长度相等
scaled: 通过更改绘图框的尺寸来获得相同的结果
square: x轴和y轴的限制值一样
# plt.axis('tight')
# 自定义刻度 xticks()和 yticks()
# xticks(tikcarr,rotation, fontsize)
plt.xticks([0,250,500,750,1000],rotation=30, fontsize='large')
plt.yticks([-45,-35,-25,-15,0],rotation=30, fontsize='small')
# 图题,轴标签和图例
plt.plot(x, np.sin(x),'-g',label='sin(x)') # 图例
plt.plot(x, np.cos(x),':b',label='cos(x)') # 图例
plt.title('a sin curve') # 图题
plt.xlabel("X") # 轴标签
plt.ylabel("sin(X)") # 轴标签
# 标题详细配置
fontsize:字体大小,默认12,也可以使用xx-small....字符串系列
fontweight:字体粗细,或者'light'、'normal'、'medium'、'semibold'、'bold'、 'heavy'、'black'。
fontstyle: 字体类型,或者'normal'、'italic'、'oblique'。
verticalalignment:垂直对齐方式 ,或者'center'、'top'、'bottom'、'baseline'
horizontalalignment:水平对齐方式,可选参数:‘left’、‘right’、‘center’
rotation:旋转角度
alpha: 透明度,参数值0至1之间
backgroundcolor: 背景颜色
bbox:给标题增加外框 ,常用参数如下:
boxstyle:方框外形
facecolor:(简写fc)背景颜色
edgecolor:(简写ec)边框线条颜色
edgewidth:边框线条大小
# 图例详细配置
| loc | 图例的位置 |
|---|---|
| prop | 字体参数 |
| fontsize | 字体大小 |
| markerscale | 图例标记与原始标记的相对大小 |
| markerfirst | 如果为 True,则图例标记位于图例标签的左侧 |
| numpoints | 为线条图图例条目创建的标记点数 |
| scatterpoints | 为散点图图例条目创建的标记点数 |
| scatteryoffsets | 为散点图图例条目创建的标记的垂直偏移量 |
| frameon | 是否显示图例边框 |
| fancybox | 边框四个角是否有弧度 |
| shadow | 控制是否在图例后面画一个阴影 |
| framealpha | 图例边框的透明度 |
| edgecolor | 边框颜色 |
| facecolor | 背景色 |
| ncol | 设置图例分为 n 列展示 |
| borderpad | 图例边框的内边距 |
| labelspacing | 图例条目之间的垂直间距 |
| handlelength | 图例句柄的长度 |
| handleheight | 图例句柄的高度 |
| handletextpad | 图例句柄和文本之间的间距 |
| borderaxespad | 轴与图例边框之间的距离 |
| columnspacing | 列间距 |
| title | 图例的标题 |
0: ‘best' : 自动选择最适合的位置
1: ‘upper right': 右上
2: ‘upper left': 左上
3: ‘lower left': 左下
4: ‘lower right':右下
5: ‘right':右
6: ‘center left':左中
7: ‘center right':右中
8: ‘lower center':下中
9: ‘upper center': 上中
10: ‘center':中间
# 颜色条-独立坐标轴
在 matplotlib 中,颜色条是一个独立的坐标轴,用于指明图形中颜色的含义。
# 配色方案
顺序配色:由一组连续的颜色构成,比如binary和viridis
互逆色:通常由互补的颜色构成,比如RdBu或者PuOr
定性配色:随机顺序的一组颜色,比如rainbow或jet
# 文本、箭头和注释
# 文本
# 添加注释 plt.text()
# plt.text(x, y, s, fontdict=None, withdash=False, **kwargs)
x,y:坐标值,文字放置的位置
string:文字内容字符串
size:字体大小
alpha:设置字体的透明度
family: 设置字体
style:设置字体的风格
wight:字体的粗细
verticalalignment:垂直对齐方式,缩写为va。可用值 ‘center’ | ‘top’ | ‘bottom’ | ‘baseline’。
horizontalalignment:水平对齐方式 ,缩写为ha。可用值‘center’ | ‘right’ | ‘left’
xycoords:选择指定的坐标轴系统
bbox给标题增加外框 ,常用参数如下:
boxstyle:方框外形
facecolor:(简写fc)背景颜色
edgecolor:(简写ec)边框线条颜色
edgewidth:边框线条大小
# 其余参数
| alpha | 0-1 | 透明度 |
|---|---|---|
| color 或 c | 颜色格式 | 设置线条颜色 |
| label | 字符串 | 为图形设置标签 |
| linestyle 或 ls | 可用线型 | 设置线条风格 |
| linewidth 或 lw | 数值 | 线宽 |
| marker | 可用标记 | 标记 |
| markeredgecolor 或 mec | 颜色 | 标记的边缘颜色 |
| markeredgewidth 或 mew | 数值 | 标记的边缘宽度 |
| markerfacecolor 或 mfc | 颜色 | 标记的颜色 |
| markersize 或 ms | 数值 | 标记的大小 |
solid_capstyle | butt、round、projecting | 实线的线端风格 |
solid_joinstyle | miter、round、bevel | 实线的连接风格 |
| drawstyle | default、steps、steps-pre、steps-mid、steps-post | 连线的规则 |
| visible | True、False | 显示或隐藏 |
| xdata | np.array | 主参数 x 的输入 |
| ydata | np.array | 主参数 y 的输入 |
# plt 到 ax
plt.xlabel() -> ax.set_xlabel()
plt.ylabel() -> ax.set_ylabel()
plt.xlim() -> ax.set_xlim()
plt.ylim() -> ax.set_ylim()
plt.title() -> ax.set_title()
# 可以不单独调用
ax.set(xlim=(0,10),ylim=(-2,2),xlabel='x',ylabel='sin(x)',title='a sin plot')
# 子图
fig = plt.figure()
ax1 = fig.add_axes([0.1,0.5,0.8,0.4],xticklabels=[],ylim=(-1.2,1.2))
ax2 = fig.add_axes([0.1,0.1,0.8,0.4],ylim=(-1.2,1.2))
x = np.linspace(0,10)
ax1.plot(np.sin(x))
ax2.plot(np.cos(x))