matplotlib pyplot

注意:结合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()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值