注意:结合NUMPY
,数据都是NUMPY
形式 。
import matplotlib
import numpy as np
from matplotlib import pyplot as plt # import matplotlib.pyplot as plt
print(matplotlib.__version__) # 3.3.4
# 设置字符集,防止中文乱码
# https://zhuanlan.zhihu.com/p/512117483
import matplotlib as mpl
import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = [u'SimHei'] # 指定默认字体
mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号’-'显示为方块的问题
# plt.rcParams["font.family"] = "SimHei"
# plt.rcParams["axes.unicode_minus"] = False
# plt.rcParams["font.size"] = 12
%matplotlib inline
:By running this special iPython command, we will be displaying plots inline.即无需执行plt.show(),在plt.plot()后直接生成图像。
x取值
x = np.arange(start=0, stop=4*np.pi, step=0.1)
y = np.linspace(start=-5, stop=5, num=50)
基础
- color
b(blue)
r(red)
g(green)
y(yellow)
m(magenta)
k(black)
w(white)
c(cyan)
- linestyle
'-'实线
'--'破折线
'-.'点划线
':'虚线
- maker
'.'点
','像素
'o'实心圆圈
'v'倒三角
'^'上三角
'>'右三角
'<'左三角
'1'下三叉
'2'上三叉
'3'左三叉
'4'右三叉
'8'八角形
's'正方形
'p'五边形
'*'星号
'h'六边形
'd'瘦菱形
'+'加好
'X'乘号
- 常用函数
# plt.figure():控制图像显示在几个图片上
# plt.plot():绘制二维图形
# plt.xlable(),plt.ylable()`:设置x轴和y轴标签
#`plt.legend(handles=[l1,l2],labels=['linear line','square line'],loc='best')`:设置图例
plt.legend(['First','Second','Thrid',……]) # 设置图例
# legend(),legend(handles, labels),legend(handles=handles), legend(labels)
=============== =============
Location String Location Code
=============== =============
'best' 0
'upper right' 1
'upper left' 2
'lower left' 3
'lower right' 4
'right' 5
'center left' 6
'center right' 7
'lower center' 8
'upper center' 9
'center' 10
frameon=False #去掉图例边框
edgecolor='blue' #设置图例边框颜色
facecolor='blue' #设置图例背景颜色,若无边框,参数无效
title # 图例标题
# `plt.title(label)`:Set a title for the Axes.
# `plt.show()`: Display all open figures. 在jupyter中有%matplotlib inline则无需
基础2
# plot([x], y, [fmt], *, data=None, **kwargs) 绘制单线条
# plot([x], y, [fmt], [x2], y2, [fmt2], ..., **kwargs) 绘制多线条
# fmt ='[marker][line][color]' E.g o:r 实心圆 虚线 红色
# 两点(0,0) (6, 100)绘制一条直线
x = np.array([0, 6])
y = np.array([0, 100])
plt.plot(x, y)
plt.show()
# 绘制不规则线,x自动生成
y = np.array([3, 8, 1, 10, 5, 7])
plt.plot(y,'o:r')
plt.show()
# 绘制一个正弦,一个余弦
x = np.arange(0, 4*np.pi, 0.1) # start,stop,step
y = np.sin(x)
z = np.cos(x)
plt.plot(x,y,x,z)
plt.show()
# 绘制两条不同线
x = np.arange(1, 11)
y = 2*x + 5
plt.plot(x, y, '*:r',label='line 1')
y = (x**2)-2
plt.plot(x, y, 'v-.g',label='line 2')
plt.title('Matplotlib Demo')
plt.xlabel("x axis")
plt.ylabel('y axis')
plt.legend(['Sine', 'Cosine']) # 设置图例
plt.show()
1. 网格线
# Matlablib 网格线grid()
y = np.array([3, 1, 16, 9])
plt.plot(y, 'gh:')
plt.grid(color='r', linestyle=':', linewidth=1, axis='y') # 设置就在轴方向显示网格线
plt.show()
2. 多图
# Matplotlib 绘制多图 subplot()
x = np.arange(0, 4*np.pi, 0.1)
y_sin = np.sin(x)
plt.subplot(2, 2, 1) # 绘图区域分割成2行2列,编号1
plt.title("Sine")
plt.plot(x, y_sin)
y_cos = np.cos(x)
plt.subplot(2, 2, 2) # 绘图区域分割成2行2列,编号2
plt.title('Cosine')
plt.plot(x, y_cos)
y_tan = np.tan(x)
plt.subplot(2,2,3) # 绘图区域分割成2行2列,编号3
plt.title('Tansine')
plt.plot(x, y_tan)
y_exp = np.exp(x)
plt.subplot(2,2,4) # 绘图区域分割成2行2列,编号4
plt.title('Exp')
plt.plot(x, y_exp)
plt.suptitle('RUNOOB subplot')
plt.show()
# Matplotlib绘制多图 subplots() 创建一个画像figure和一组子图subplots,返回fig代表整个画像,ax代表坐标轴和画的图
# subplots(nrows=1, ncols=1, *, sharex=False, sharey=False, squeeze=True, subplot_kw=None, gridspec_kw=None, **fig_kw)
x = np.linspace(0, 2*np.pi, 400)
y = np.sin(x**2)
fig, ax = plt.subplots()
ax.plot(x, y, marker='o',label='line')
ax.set_xlabel('x - axis')
ax.set_ylabel('y - axis')
ax.set_title('Simple plot')
ax.legend()
fig, (ax1, ax2) = plt.subplots(1, 2, sharey=True) # 1行2列,列分享
ax1.plot(x, y)
ax2.scatter(x, y)
plt.suptitle('sharey=True')
fig, axs = plt.subplots(2,2, subplot_kw=dict(projection='polar'))
axs[0, 0].plot(x, y)
axs[1, 1].scatter(x, y)
plt.suptitle('polar')
plt.subplots(2,2,sharex='col') # 行分享
plt.suptitle("sharex='col'")
plt.subplots(2,2,sharex=True,sharey=True) # 行分享,列分享
plt.suptitle("sharex='True', sharey='True'")
# Create figure number 10 with a single subplot
# and clears it if it already exists.
fig, ax = plt.subplots(num=10, clear=True)
plt.show()
3. 散点图
# Matplotlib 散点图 scatter()
x = np.array([1,2,3,4,5,6,7,8])
y = np.array([1,4,9,16,7,11,23,18])
sizes = np.array([20,50,100,200,500,1000,60,90]) # 设置图标大小
colors = np.array(['red','green','black','orange','purple','beige','cyan','magenta']) # 自定义点的颜色
plt.scatter(x,y,s=sizes, c=colors)
plt.show()
# 设置两组数据在同一散点图
x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99, 86, 87, 88, 111, 86, 103, 87, 94, 78, 77, 85, 86])
plt.scatter(x, y, color="hotpink")
x = np.array([2,2,8,1,15,8,12,9,7,3,11,4,7,14,12])
y = np.array([100,105,84,105,90,99,90,95,94,100,79,112,91,80,85])
plt.scatter(x, y, color="#88c999")
plt.show()
# 随机设置散点图
np.random.seed(19680801) # 随机数生成器的种子
N = 50
x = np.random.rand(N)
y = np.random.rand(N)
colors = np.random.rand(N)
area = (30*np.random.rand(N))**2 # 0 to 15 point radii
plt.scatter(x, y, s=area, c=colors, alpha=0.5) # 设置标记大小、颜色、透明度
plt.title('Rand Scatter')
plt.legend('s')
plt.show()
# 设置颜色条
x = np.array([5,7,8,7,2,17,2,9,4,11,12,9,6])
y = np.array([99,86,87,88,111,86,103,87,94,78,77,85,86])
colors = np.array([0, 10, 20, 30, 40, 45, 50, 55, 60, 70, 80, 90, 100])
plt.scatter(x, y, c=colors, cmap='viridis')
plt.title("Setting colormap")
plt.show()
4. 柱状图
# Matplotlib 柱状图 bar()
np.random.seed(0)
x = np.array([1,3,5,7,9])
x2 = np.array([2,4,6,8,10])
y = np.random.rand(5)
y2 = np.random.rand(5)
plt.bar(x, y, color = "#4CAF50",align="center")
plt.bar(x2, y2, color='g', align='center')
plt.title('Bar graph')
plt.xlabel('X axis')
plt.ylabel('Y axis')
plt.show()
# 设置垂直方向的柱形图 barh()
x = np.array(["runoob-1", 'runoob-2','runoob-3','C-runoob'])
y = np.array([12,22,6,18])
plt.barh(x,y,color=["#4CAF50","red","hotpink","#556B2F"])
plt.title("barh()")
plt.show()
5. 饼图
# Matplotlib 饼图 pie()
y = np.array([35, 25, 25, 15])
plt.pie(y, labels=['A', 'B', 'C', 'D'],
colors = ['#d5695d','#5d8ca8','#65a479','#a564c9'],
explode=(0,0.2,0,0), # 第二部分突出显示,值越大,距离中心越远
autopct='%.2f%%' #格式化输出百分比
)
plt.title('pie()')
plt.show()
6. 直方图hist()
(https://www.cnblogs.com/red-27/p/14810220.html)
plt.hist(x, bins=None, range=None, density=None, weights=None, cumulative=False, bottom=None, histtype='bar', align='mid', orientation='vertical', rwidth=None, log=False, color=None, label=None, stacked=False, normed=None, *, data=None, **kwargs)
x:数据必须是一维的
bins: 直方图的柱数
range:剔除较大和较小的离群值,给出全局范围
density:
# Matplotlib 直方图 hist
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()
7. 绘制函数图像
# 绘制函数图像
# plt.rcParams["font.sans-serif"]=["Heiti TC"] # mac系统
# plt.rcParams["font.sans-serif"]=["SimHei"] # windows系统
# plt.rcParams["axes.unicode_minus"]=False # 使坐标轴上的负坐标能正常出现
x = np.linspace(-5,5,20)
y1=2*x+1
y2=x**2
plt.figure(num=3,figsize=(8,8),dpi=None,facecolor=None,edgecolor=None,frameon=True)
l1,= plt.plot(x,y2,'b:o') # return a list of lines representing the ploted data.
l2,= plt.plot(x,y1,color='red',marker='d',linewidth=1.0,linestyle='--',alpha=0.9)
# 设置图例
plt.legend(handles=[l1,l2],labels=['linear line','square line'],loc='best')
# 设置坐标轴标签
plt.xlabel('x axis')
plt.ylabel('y axis')
# 设置坐标轴数值最大和最小
plt.xlim((-3,4))
plt.ylim((-2,3))
# 更改坐标轴标签
new_ticks=np.linspace(-1,2,5)
print(new_ticks)
plt.xticks(new_ticks, rotation='vertical',fontsize=12)
plt.yticks([-2,-1.8,-1,1.22,3],
[r'$really\ bad$',r'$bad$',r'$normal$',r'$good$',r'$really\ good$'],rotation=90,fontsize=12)
# 坐标轴移动,4个spines(支柱),top,bottom,left,right
ax=plt.gca()
ax.spines['right'].set_color('none') # 设置右边支柱的颜色为空(或左移到x轴0处)
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom') # 锁定底部的x轴
ax.yaxis.set_ticks_position('left')
ax.spines['bottom'].set_position(('data',0)) # 'data'表示按数值挪动,其后数字代表挪动到y轴的刻度值
ax.spines['left'].set_position(('data',0))
# 设置网格线
plt.grid(visible=None, which='major', axis='y', ls=':',lw=2,c='y',alpha=0.8)
# 绘制参考线
plt.axvline(x=0.5, c='black', ls='-', lw=2)
plt.axhline(y=1.0, c='black', ls='-.', lw=2)
# 绘制参考域
plt.axvspan(xmin=-0.5, xmax=1.0, facecolor='gray', alpha=0.4)
plt.axhspan(ymin=-1.0, ymax=0.5, facecolor='rosybrown', alpha=0.4)
#标记坐标点
plt.text(0.5, 0.5, "marked", c='black',alpha=0.7, fontsize=12)
#添加注释文本
plt.annotate("minimum",xy=(1, 0.5), xytext=(1.2, 0.3),color='r',alpha=0.7,
weight="bold",fontsize=12,arrowprops=dict(arrowstyle="->",
connectionstyle="arc3",color="b"))
# 填充
plt.fill_between(x,y1,0,facecolor='gray',alpha=0.4)
# 保存图像
plt.savefig('./123.png')
# 显示图像
plt.show()