机器学习数据科学包——Matplotlib

目录

  • 数据准备
    • 创建array对象
    • 常用函数
  • 基本图形
    • 散点图
    • 折线图
    • 条形图
    • 直方图
    • 饼状图
    • 箱形图
    • 极坐标
  • 颜色样式
    • 点、线
    • 样式字符串
  • Matplotlib作图方式
  • 图形功能
    • 子图与多图
    • 网格
    • 图例
    • 坐标轴
    • 注释
    • 文字
    • text公式
    • 区域填充
    • 形状填充
    • 美化
  • 实战
    • 函数积分图
    • 散点条形图
    • 球员能力图

matplotlib是基于Python语言的开源项目,旨在为Python提供一个数据绘图包。用户在熟悉了核心对象之后,可以轻易的定制图像。

import matplotlib.pyplot as plt 

数据准备

Numpy是Python的开源的数值计算扩展,可用来存储和处理大型矩阵,比Python自身数据结构要高效。

import numpy as np

创建array对象

1、从python的基础数据对象转化

a = [1, 2, 3, 4]
x1 = np.array(a)
print(x1)
print(x1.shape)
print(type(x1))

# 运行结果
[1 2 3 4]
(4,)
<class 'numpy.ndarray'>

索引及切片

print(x1[1:3])
print(x1[:3])
print(x1[2:])
print(x1[::-1])

# 运行结果
[2 3]
[1 2 3]
[3 4]
[4 3 2 1]

2、通过Numpy内生的函数生成

c=np.arange(11)
print(c) 
print(c.shape) 
print(type(c))

# 运行结果
[ 0  1  2  3  4  5  6  7  8  9 10]
(11,)
<class 'numpy.ndarray'>

3、从硬盘(文件)读取数据
机器学习数据科学包——Matplotlib_第1张图片
读取1,4,6列到一个变量中

x=np.loadtxt('文件地址\\000001.csv',delimiter=',',skiprows=1,usecols=(1,4,6),unpack=False)
print(x.shape)
print(type(x))

# 运行结果
(242, 3)
<class 'numpy.ndarray'>

读取1,4,6列到三个变量中

o,c,v=np.loadtxt('文件地址\\000001.csv',delimiter=',',skiprows=1,usecols=(1,4,6),unpack=True)
print(o.shape,c.shape,v.shape)
(242,) (242,) (242,)

常用函数

array对象常用函数
min最小值,max最大值,median中位数,mean平均值,var方差,sort排序
调用方法
1、np.func(x)
2、x.func()

c=np.random.randint(1,100,10)
print(c)
print(f'highest={np.max(c)}\nlowest={np.min(c)}\nmedian={np.median(c)}\nmean={np.mean(c)}\nvariance={np.var(c)}')

# 运行结果
[65 98 60 50 19 42 51  6 19 19]
highest=98
lowest=6
median=46.0
mean=42.9
variance=700.89
print(c)
c.sort()
print(c)

# 运行结果
[65 98 60 50 19 42 51  6 19 19]
[ 6 19 19 19 42 50 51 60 65 98]

基本图形

散点图

散点图显示两组数据的值,每个点的坐标位置由变量的值决定。由一组不连接的点完成,用于观察两种变量的相关性。例如身高-体重、温度-纬度、等等。
随机点绘制散点图

N=1000
x=np.random.randn(N)
y1=np.random.randn(len(x))
plt.scatter(x,y1)
plt.show()

在这里插入图片描述
分析股票价格涨幅

open,close=np.loadtxt('文件地址\\000001.csv',delimiter=',',skiprows=1,usecols=(1,4),unpack=True)
change=close-open
yesterday=change[:-1]
today=change[1:]
plt.scatter(today,yesterday)
plt.show()

机器学习数据科学包——Matplotlib_第2张图片
外观调整
1、颜色, c
2、点大小, s
3、透明度, alpha
4、点形状, marker

plt.scatter(yesterday,today,s=500,c='r',marker='o',alpha=0.5)
plt.show()

机器学习数据科学包——Matplotlib_第3张图片

折线图

折线图是用直线段将各数据连接起来组成的图形,常用来观察数据随时间变化的趋势,例如股票价格、温度变化······
函数图(二次曲线图)

x=np.linspace(-10,10,5)
y=x**2
plt.plot(x,y)
plt.show()

机器学习数据科学包——Matplotlib_第4张图片
股票时间序列图
需要导入matplotlib.dates进行日期格式的转化。

import matplotlib.dates as mdates

读取时间数据时需要使用mdates.bytespdate2num()函数将日期转化为Matplotlib可以识别的浮点型。
原始数据

Date,Open,High,Low,Close,Turnover,Volume
1/5/2015,3258.63,3369.28,3253.88,3350.52,549760.13,53135238400
1/6/2015,3330.8,3394.22,3303.18,3351.45,532398.46,50166169600
1/7/2015,3326.65,3374.9,3312.21,3373.95,436416.7,39191888000
1/8/2015,3371.96,3381.57,3285.1,3293.46,399230.3,37113116800
1/9/2015,3276.97,3404.83,3267.51,3285.41,458648,41024086400

读取数据

date,open,close=np.loadtxt('文件地址\\000001.csv',delimiter=',',
                           converters={
     0:mdates.bytespdate2num('%m/%d/%Y')},skiprows=1,usecols=(0,1,4),unpack=True)

作图时使用plt.plot_date()函数以识别日期

plt.plot_date(date,close,'y-')
plt.plot_date(date,open,'r--')
plt.show()

机器学习数据科学包——Matplotlib_第5张图片
参数
1、线型 linestyle
2、颜色 color
3、点形状 marker
4、点大小 markersize

plt.plot(date, close, color='green', linestyle='--', marker='o',
     markerfacecolor='blue', markersize=6)
plt.show()

机器学习数据科学包——Matplotlib_第6张图片

条形图

以长方形的长度为变量的统计图表,用来比较多个项目分类的数据大小,通常利用于较小的数据集分析,例如不同季度的销量,不同国家的人口等。
参数
1、长方形中点横坐标 x,
2、长方形高度 height,
3、长方形宽度 width,
4、长方形底部纵坐标 bottom,
5、长方形颜色 color,
6、条形图方向 orientation
简单例子

N=5
y=[20,10,30,25,15]
index = np.arange(N)
p1 = plt.bar(x=index, height=y,width=0.5,bottom=0,color='red')
plt.show()

机器学习数据科学包——Matplotlib_第7张图片
横向直方图

p2 = plt.bar(x=0, bottom=index, width=y,height=0.5,orientation='horizontal')
# 也可使用 p2 = plt.barh(bottom=index,width=y,height=0.5)
plt.show()

机器学习数据科学包——Matplotlib_第8张图片
并列条形图

index=np.arange(4)
sales_BJ=[52,55,63,53]
sales_SH=[44,66,55,41]
bar_width=0.3
plt.bar(index,sales_BJ,bar_width,color='b')
plt.bar(index+bar_width,sales_SH,bar_width,color='r')
plt.show()

机器学习数据科学包——Matplotlib_第9张图片
层叠条形图

index=np.arange(4)
sales_BJ=[52,55,63,53]
sales_SH=[44,66,55,41]
bar_width=0.3
plt.bar(index,sales_BJ,bar_width,color='b')
plt.bar(index,sales_SH,bar_width,color='r',bottom=sales_BJ)
plt.show()

机器学习数据科学包——Matplotlib_第10张图片

直方图

与条形图类似,由一系列高度不等的纵向条形组成,表示数据分布的情况。
例如某年级同学的身高分布情况。
参数
1、数据 x,
2、条形数目 bins,
3、颜色 color,
4、是否标准化 normed
简单例子

mu = 100  # 平均值
sigma = 20  # 分布标准差
x = mu + sigma * np.random.randn(2000)
plt.hist(x, bins=10,color='red',normed=True)
plt.show()

机器学习数据科学包——Matplotlib_第11张图片
2-D直方图
以颜色亮暗代表密度大小

x = np.random.randn(1000)+2
y = np.random.randn(1000)+3
plt.hist2d(x, y, bins=40)
plt.show()

机器学习数据科学包——Matplotlib_第12张图片

饼状图

饼状图显示一个数据系列中各项的大小与各项总和的比例,数据点显示为整个饼状图的百分比,如前十大品牌占市场份额图。
参数
1、数据 x,
2、标签 labels,
3、显示百分比 autopct,
4、距圆心的距离 explode,
5、是否有阴影 shadow
简单例子

labels = 'A', 'B', 'C', 'D'
fracs = [15, 30, 45, 10]
explode = (0, 0.05, 0.05, 0)
plt.axes(aspect=1) # 横纵坐标比值
plt.pie(fracs, explode=explode, labels=labels, autopct='%.0f%%', shadow=True)
plt.show()

机器学习数据科学包——Matplotlib_第13张图片

箱形图

箱形图(Box-plot)又称为盒须图、盒式图或箱线图,是一种用作显示一组数据分散情况资料的统计图。因形状如箱子而得名,在各种领域也经常被使用,常见于品质管理。
图形从上到下包含这几个部分:异常值、上边缘、上四分位数、中位数、下四分位数、下边缘、异常值。
参数
1、标签 labels,
2、异常值形状 sym,
3、边缘长度 whis
单数组

np.random.seed(100)
data = np.random.normal(size=1000, loc=0.0, scale=1.0)
plt.boxplot(data,sym='o',whis=1.5)
plt.show()

机器学习数据科学包——Matplotlib_第14张图片
多维数组

data = np.random.normal(size=(100, 4), loc=[1,3,2,4], scale=1.0)
labels = ['A','B','C','D']
plt.boxplot(data, labels=labels)
plt.show()

机器学习数据科学包——Matplotlib_第15张图片

极坐标

r = np.arange(1,6,1)
theta = [0,np.pi/2,np.pi,3*np.pi/2,2*np.pi]
ax = plt.subplot(111,projection='polar')
ax.plot(theta,r,color='r',linewidth=3)
ax.grid(True,linestyle='--')
plt.show()

机器学习数据科学包——Matplotlib_第16张图片

颜色样式

作图时在关键词color后输入参数,某些颜色独有的参数前可以不写关键词color,如内建默认颜色缩写、html 十六进制颜色代码。
一、八种内建默认颜色缩写
b: blue 蓝
g: green 绿
r: red 红
c: cyan 蓝绿
m: magenta 品红
y: yellow 黄
k: black 黑
w: white 白
二、RGB元组
输入包含三个元素的元组
三、html 十六进制
输入某种颜色对应的代码
四、灰色阴影
输入一个浮点数代表灰度

y=np.arange(1,5)
plt.plot(y,'y');
plt.plot(y+1,color=(0.1,0.2,0.3))
plt.plot(y+2,'#FF00FF')
plt.plot(y+3,color='0.5')
plt.show()

机器学习数据科学包——Matplotlib_第17张图片

点、线

一、23种点形状
注意,不同点形状默认使用不同颜色。
”.” point 圆点
”,” pixel 像素
“o” circle 圆圈
“v” triangle_down 倒三角形
“^” triangle_up 正三角形
“<” triangle_left 左三角
“>” triangle_right 右三角
“1” tri_down 正Y形
“2” tri_up 倒Y形
“3” tri_left 左Y形
“4” tri_right 右Y形
“8” octagon 八角形
“s” square 正方形
“p” pentagon 五角形
“*” star 星形
“h” hexagon1 六角形1
“H” hexagon2 六角形2
“+” plus 加号
“x” x x形
“D” diamond 菱形
“d” thin_diamond 窄菱形
“|” vline 竖线
“_” hline 横线
加上关键词marker则点之间有线段相连

y=np.arange(1,5)
plt.plot(y,marker='o');
plt.plot(y+1,marker='D');
plt.plot(y+2,marker='^');
plt.plot(y+3,'1');
plt.plot(y+4,'p');
plt.plot(y+5,'x');
plt.show()

机器学习数据科学包——Matplotlib_第18张图片
二、四种线型
"- " 实线
"-- "虚线
"-. "点划线
" : " 点线

y=np.arange(1,5)
plt.plot(y,'-')
plt.plot(y+1,'--')
plt.plot(y+2,'-.')
plt.plot(y+3,':')
plt.show()

机器学习数据科学包——Matplotlib_第19张图片

样式字符串

可以将颜色,点型,线型写成一个字符串。如:cx-- mo: kp-

y=np.arange(1,5)
plt.plot(y,'cx--');
plt.plot(y+1,'kp:');
plt.plot(y+2,'mo-.');
plt.show()

机器学习数据科学包——Matplotlib_第20张图片

Matplotlib作图方式

一、pyplot
经典高层封装,以上所用的都是pyplot高层封装。
特点:简单易用,交互使用时方便,可以根据命令实时作图,但底层定制能力不足。

import numpy as np
import matplotlib.pyplot as plt

x=np.arange(0,10,1)
y=np.random.randn(len(x))
plt.plot(x,y)
plt.title('pyplot')
plt.show()

机器学习数据科学包——Matplotlib_第21张图片
二、pylab
将Matplotlib 和 NumPy 合并的模块,模拟Matlab的编程环境。
特点:完全封装,环境最接近Matlab。不推荐使用。

from pylab import *

x=arange(0,10,1)
y=randn(len(x))
plot(x,y)
title('pylab')
show()

机器学习数据科学包——Matplotlib_第22张图片
三、面向对象的方式
Matplotlib的精髓,更基础和底层的方式。
特点:接近Matplotlib基础和底层的方式,难度稍大,但定制能力强,是Matplotlib的精髓。
Matplotlib对象简介
1、画布 FigureCanvas
2、图 Figure
3、坐标轴 Axes

import numpy as np
import matplotlib.pyplot as plt

x=np.arange(0,10,1)
y=np.random.randn(len(x))
fig=plt.figure()
ax=fig.add_subplot(111)
l,=plt.plot(x,y)
t=ax.set_title('object oriented')
plt.show()

机器学习数据科学包——Matplotlib_第23张图片

图形功能

子图与多图

一、 子图
plt方式
plt.subplot(111)

  • 参数一,子图总行数
  • 参数二,子图总列数
  • 参数三,子图位置
x=np.arange(1,100)
plt.subplot(221)
plt.plot(x,x)

plt.subplot(222)
plt.plot(x,-x)

plt.subplot(223)
plt.plot(x,x*x)

plt.subplot(224)
plt.plot(x,np.log(x))

plt.show()

机器学习数据科学包——Matplotlib_第24张图片
面向对象方式
1、fig=plt.figure() 生成Figure实例,可以添加Axes实例。
2、ax=fig.add_subplot(111) 返回Axes实例

fig=plt.figure()
x=np.arange(1,100)

ax1=fig.add_subplot(221)
ax1.plot(x,x)

ax2=fig.add_subplot(222)
ax2.plot(x,-x)

ax3=fig.add_subplot(223)
ax3.plot(x,x**2)

ax4=fig.add_subplot(224)
ax4.plot(x,np.log(x))

plt.show()

机器学习数据科学包——Matplotlib_第25张图片
二、多图
可以创建多个Figure对象,同时生成多张图。
fig1=plt.figure()
fig2=plt.figure()

fig1=plt.figure()
ax1=fig1.add_subplot(111)
ax1.plot([1,2,3],[3,2,1])

fig2=plt.figure()
ax2=fig2.add_subplot(111)
ax2.plot([1,2,3],[1,2,3])

plt.show()

机器学习数据科学包——Matplotlib_第26张图片

网格

在图中显示网格,以便更好地观察数据。
plt方式
plt.grid(True,color=‘r’,linestyle=’–’,linewidth=‘2’)

y=np.arange(1,5)
plt.plot(y,y*2)
plt.grid(True,color='r',linestyle='--',linewidth='2')
plt.show()

机器学习数据科学包——Matplotlib_第27张图片
面向对象方式
ax.grid(color=‘g’)

x=np.arange(0,10,1)
y=np.random.randn(len(x))
fig=plt.figure()
ax=fig.add_subplot(111)
ax.plot(x,y)
ax.grid(color='g')
plt.show()

机器学习数据科学包——Matplotlib_第28张图片

图例

图例是可以表示图中每条线名字的信息框。
参数
1、位置:loc
0:自适应、1:右上角、2:左上角、3:左下角、4:右下角
2、列数:ncol
定义信息框的列数
plt方式
plt.legend()

x=np.arange(1,11,1)
y=x*x
plt.plot(x,x*2,label='Normal')
plt.plot(x,x*3,label='Fast')
plt.plot(x,x*4,label='Faster')
plt.legend(loc=2,ncol=2)
plt.show()

# 另一种方式
# plt.plot(x,x*2)
# plt.plot(x,x*3)
# plt.plot(x,x*4)
# plt.legend(['Normal','Fast','Faster'])
# plt.show()

机器学习数据科学包——Matplotlib_第29张图片
面向对象方式
ax.legend()

x=np.arange(0,10,1)
y=np.random.randn(len(x))
fig=plt.figure()
ax=fig.add_subplot(111)
ax.plot(x,y)
ax.plot(x,y+1)
ax.plot(x,y+2)
ax.legend(['legend1','legend2','legend3'],loc=1,ncol=3)
plt.show()

机器学习数据科学包——Matplotlib_第30张图片

坐标轴

一、坐标轴范围

x = np.arange(-10,11,1)
plt.plot(x,x*x)
plt.show()

机器学习数据科学包——Matplotlib_第31张图片
显示坐标范围

print(plt.axis())

# 运行结果
(-11.0, 11.0, -5.0, 105.0)

可以根据需求调整坐标轴的范围
1、axis():同时调整x与y的范围

plt.axis([-5,5,10,50])
plt.show()

机器学习数据科学包——Matplotlib_第32张图片
2、xlim()、ylim():只调整x或y的范围

plt.xlim(xmin=-2,xmax=8)
plt.ylim(ymin=0,ymax=80)
plt.show()

机器学习数据科学包——Matplotlib_第33张图片
二、坐标轴刻度
1、数字坐标轴
同时调整xy轴

x = np.arange(1,11,1)
plt.plot(x,x)
ax = plt.gca() # 获取当前图像的坐标轴
ax.locator_params(nbins=20) # 调整刻度
plt.show()

机器学习数据科学包——Matplotlib_第34张图片
仅调整一条坐标轴

ax.locator_params('x',nbins=20)
plt.show()

机器学习数据科学包——Matplotlib_第35张图片
2、日期坐标轴

import datetime #导入datetime模块
import matplotlib as mpl #导入matplotlib模块

fig = plt.figure()
start = datetime.datetime(2019,1,1)
stop = datetime.datetime(2020,1,1)
delta = datetime.timedelta(days=1)
dates = mpl.dates.drange(start,stop,delta)
y = np.random.rand(len(dates))
ax = plt.gca()
ax.plot_date(dates,y,linestyle='-',marker='')
date_format = mpl.dates.DateFormatter('%Y/%m') # 格式化日期
ax.xaxis.set_major_formatter(date_format) #将格式化日期运用到图中
fig.autofmt_xdate() #自动调整日期显示
plt.show()

机器学习数据科学包——Matplotlib_第36张图片
三、添加坐标轴
可以在一张图中添加不同刻度的坐标轴对应不同的线,如两个y轴,或两个x轴。
plt方式

x = np.arange(2,20,1)
y1 = x*x
y2 = np.log(x)
plt.plot(x,y1)
plt.twinx()
plt.plot(x,y2,'r')
plt.show()

print('y1:\n',y1)
print('y2:\n',y2)

# 运行结果
y1:
 [  4   9  16  25  36  49  64  81 100 121 144 169 196 225 256 289 324 361]
y2:
 [0.69314718 1.09861229 1.38629436 1.60943791 1.79175947 1.94591015
 2.07944154 2.19722458 2.30258509 2.39789527 2.48490665 2.56494936
 2.63905733 2.7080502  2.77258872 2.83321334 2.89037176 2.94443898]

机器学习数据科学包——Matplotlib_第37张图片
面向对象方式

x = np.arange(2,20,1)
y1 = x*x
y2 = np.log(x)
fig = plt.figure()
ax1 = fig.add_subplot(111)
ax1.plot(x,y1)
ax1.set_ylabel('Y1')
ax2 = ax1.twinx()
ax2.plot(x,y2,'r')
ax2.set_ylabel('Y2')
ax1.set_xlabel('Compare Y1 and Y2')
plt.show()

print('y1:\n',y1)
print('y2:\n',y2)

# 运行结果
y1:
 [  4   9  16  25  36  49  64  81 100 121 144 169 196 225 256 289 324 361]
y2:
 [0.69314718 1.09861229 1.38629436 1.60943791 1.79175947 1.94591015
 2.07944154 2.19722458 2.30258509 2.39789527 2.48490665 2.56494936
 2.63905733 2.7080502  2.77258872 2.83321334 2.89037176 2.94443898]

机器学习数据科学包——Matplotlib_第38张图片

注释

有时我们需要在图形中的某处添加一个符合,强调这里,给出信息提示,这就是注释。
plt.annotate(s=‘str’,xy=(x,y) ,xytext=(l1,l2) ,arrowprops=dict())
参数
s :注释文本内容
xy :被注释的坐标点
xytext :注释文字的坐标位置

arrowprops内的参数:
width:箭头的宽度(以点为单位)
headwidth:箭头底部以点为单位的宽度
headlength:箭头的长度(以点为单位)
shrink:总长度的一部分,从两端“收缩”
facecolor:箭头颜色

x = np.arange(-10,11,1)
y = x*x
plt.plot(x,y)
plt.annotate('this is the bottom',xy=(0,1),xytext=(-2.35, 40),
             arrowprops=dict(facecolor='r', headlength=30,headwidth=20,width=10,shrink=0.05))
plt.show()

机器学习数据科学包——Matplotlib_第39张图片

文字

plt.text(x,y,s=‘str’,family=‘fantasy’,size=20,color=‘b’,
style=‘italic’,weight=‘light’,bbox=dict(facecolor=‘r’,alpha=0.2))
参数
xy :文本的坐标点
s :文本内容
family:字体种类
----按优先级排列如下‘serif’,‘sans-serif’,‘cursive’, ‘fantasy’,‘monospace’
size:文字大小
color:文字颜色
style:风格
----‘normal’,‘italic’,‘oblique’
weight:字体粗细
----可以用0-1000的数字表示,也可以使用以下选项
----‘ultralight’, ‘light’, ‘normal’, ‘regular’, ‘book’, ‘medium’, ‘roman’,
----‘semibold’, ‘demibold’, ‘demi’, ‘bold’, ‘heavy’, ‘extra bold’, ‘black’
bbox:文本框
facecolor:文本框颜色
alpha:文本框透明度

x = np.arange(-10,11,1)
y = x*x
plt.plot(x,y)
plt.text(-3,40,'function:y=x*x',family='fantasy',size=20,color='b',
         style='italic',weight='light',bbox=dict(facecolor='r',alpha=0.2))
plt.show()

机器学习数据科学包——Matplotlib_第40张图片

text公式

matplotlib自带mathtext引擎,不需安装TeX系统。
$作为开始和结束符,如 “$ y=x+z $”。
具体内容参考官方文档:数学表达式文档
这里以下面四个公式举例

fig = plt.figure()
ax = fig.add_subplot(111)
ax.set_xlim([1,7])
ax.set_ylim([1,5])
ax.text(2,4,r"$ \alpha_i \beta_j \pi \lambda \omega $",size=25)
ax.text(4,4,r"$ \sin(0)=\cos(\frac{\pi}{2}) $",size=25)
ax.text(2,2,r"$ \lim_{x \rightarrow y} \frac{1}{x^3} $",size=25)
ax.text(4,2,r"$ \sqrt[4]{x}=\sqrt{y} $",size=25)
plt.show()

机器学习数据科学包——Matplotlib_第41张图片

区域填充

fill:对曲线与x轴之间的区域进行填充
fill_between:对曲线之间的区域进行填充
1、分别对两条曲线进行颜色填充,alpha为透明度

x = np.linspace(0,5*np.pi,1000)
y1 = np.sin(x)
y2 = np.sin(2*x)
plt.fill(x,y1,'b',alpha=0.3)
plt.fill(x,y2,'r',alpha=0.3)
plt.show()

机器学习数据科学包——Matplotlib_第42张图片
2、对两条曲线之间的区域进行颜色填充

x = np.linspace(0,5*np.pi,1000)
y1 = np.sin(x)
y2 = np.sin(2*x)
fig = plt.figure()
ax = plt.gca()
ax.plot(x,y1,x,y2,color='black')
ax.fill_between(x,y1,y2,facecolor='blue')
plt.show()

机器学习数据科学包——Matplotlib_第43张图片
3、对不同区域填充不同的颜色,where为条件判断语句,interpolate为精细填充

x = np.linspace(0,5*np.pi,1000)
y1 = np.sin(x)
y2 = np.sin(2*x)
fig = plt.figure()
ax = plt.gca()
ax.plot(x,y1,color='b')
ax.plot(x,y2,color='r')
ax.fill_between(x,y1,y2,where=y1>y2,facecolor='yellow',interpolate=True)
ax.fill_between(x,y1,y2,where=y2>y1,facecolor='green',interpolate=True)
plt.show()

机器学习数据科学包——Matplotlib_第44张图片

形状填充

在图形中添加需要的形状。
需要导入matplotlib.patches模块
以下面四个形状举例

fig,ax = plt.subplots()
# 添加圆形
xy1 = np.array([0.2,0.2])
circle = mpatches.Circle(xy1,0.05)
ax.add_patch(circle)
# 添加长方形
xy2 = np.array([0.2,0.8])
rect = mpatches.Rectangle(xy2,0.2,0.1,color='r')
ax.add_patch(rect)
# 添加正多边形
xy3 = np.array([0.8,0.2])
polygon = mpatches.RegularPolygon(xy3,5,0.1,color='g')
ax.add_patch(polygon)
# 添加椭圆
xy4 = np.array([0.8,0.8])
ellipsis = mpatches.Ellipse(xy4,0.4,0.2,color='y')
ax.add_patch(ellipsis)

plt.axis('equal') #使坐标轴相对比例为1
plt.show()

机器学习数据科学包——Matplotlib_第45张图片

美化

查看可选的风格

>>> 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']

首先做出以下四幅子图

fig,axes = plt.subplots(ncols=2,nrows=2)
ax1,ax2,ax3,ax4 = axes.ravel()

x,y = np.random.normal(size=(2,100))
ax1.plot(x,y,'o')

x = np.arange(0,10)
y = np.arange(0,10)
shift = np.linspace(0,10,7)
for s in shift:
    ax2.plot(x,y+s,'-')

x = np.arange(5)
y1,y2,y3 = np.random.randint(1,25,size=(3,5))
width = 0.25
ax3.bar(x,y2,width,color='b')
ax3.bar(x+width,y2,width,color='r')
ax3.bar(x+2*width,y3,width,color='g')

for color in ['b','g','r','c','m','y','k']:
    xy = np.random.normal(size=2)
    ax4.add_patch(plt.Circle(xy,0.3,color=color))
ax4.axis('equal')

plt.show()

机器学习数据科学包——Matplotlib_第46张图片
使用 'ggplot’风格进行美化

plt.style.use('ggplot')

机器学习数据科学包——Matplotlib_第47张图片
使用’bmh’风格进行美化

plt.style.use('bmh')

机器学习数据科学包——Matplotlib_第48张图片

实战

函数积分图

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Polygon

def func(x):
    return -(x-2)*(x-8)+40
x = np.linspace(0,10)
y = func(x)
fig,ax = plt.subplots()
plt.plot(x,y,'r',linewidth=2)
a = 2
b = 9
ax.set_xticks([a,b]) #设置x轴显示的刻度
ax.set_yticks([]) #将y轴的刻度隐藏
ax.set_xticklabels(['$a$','$b$']) #将x轴的刻度用字符显示
plt.figtext(0.9,0.05,'$x$') #标注x轴
plt.figtext(0.1,0.9,'$y$') #标注y轴
# 生成多边形区域
ix = np.linspace(a,b)
iy = func(ix)
ixy = zip(ix,iy) #拼接成坐标对
verts = [(a,0)]+list(ixy)+[(b,0)] #生成多边形边缘坐标
poly = Polygon(verts,facecolor='0.9',edgecolor='0.5') #生成多边形对象
ax.add_patch(poly) #添加多边形
#添加数学公式
x_math = (a+b)*0.5 #公式横坐标
y_math = 20 #公式纵坐标
plt.text(x_math,y_math,r'$\int_a^b (-(x-2)*(x-8)+40)dx$',
         fontsize=15,horizontalalignment='center') #编辑公式,设置位置
#调整xy轴范围
plt.ylim(ymin=0)
plt.xlim(xmin=0,xmax=10)
plt.show()

机器学习数据科学包——Matplotlib_第49张图片

散点条形图

import numpy as np
import matplotlib.pyplot as plt

plt.style.use('ggplot') #设置风格

x = np.random.randn(200)
y = -x + np.random.randn(200) * 0.5
margin_border = 0.1 #左侧空白距离
width = 0.6 #散点图边长
margin_between = 0.02 #散点图与条形图举例
height = 0.2 #条形图高度
#生成散点图
left_s = margin_border #散点图左下角横坐标
bottom_s = margin_border #散点图左下角纵坐标
height_s = width #散点图高度
width_s = width #散点图宽度
#生成x条形图
left_x = margin_border #x条形图左下角横坐标
bottom_x = margin_border + width + margin_between #x条形图左下角纵坐标
height_x = height #x条形图高度
width_x = width #x条形图宽度
#生成y条形图
left_y = margin_border + width + margin_between #y条形图左下角横坐标
bottom_y = margin_border #y条形图左下角纵坐标
height_y = width #y条形图高度
width_y = height #y条形图宽度
#画出底图
plt.figure(1,figsize=(8,8)) #生成画布
rect_s = [left_s,bottom_s,width_s,height_s] #生成散点图底图
rect_x = [left_x,bottom_x,width_x,height_x] #生成x条形图底图
rect_y = [left_y,bottom_y,width_y,height_y] #生成y条形图底图
axScatter = plt.axes(rect_s) #画出散点图底图
axHisX = plt.axes(rect_x) #画出x条形图底图
axHisY = plt.axes(rect_y) #画出y条形图底图
#隐藏x条形图的x轴及y条形图的y轴
axHisX.set_xticks([])
axHisY.set_yticks([])
#画出图形
axScatter.scatter(x,y) #画出散点图
bin_width = 0.25 #条形宽度
xymax = np.max([np.max(np.fabs(x)),np.max(np.fabs(y))]) #找出最大值
lim = int(xymax/bin_width+1)*bin_width #根据最大值与条形宽度确定坐标范围
axScatter.set_xlim(-lim,lim) #设置散点图x轴范围
axScatter.set_ylim(-lim,lim) #设置散点图y轴范围
bins = np.arange(-lim,lim+bin_width,bin_width) #设置条形起始坐标
axHisX.hist(x,bins=bins) #画出x条形图
axHisY.hist(y,bins=bins,orientation='horizontal') #画出y条形图
axHisX.set_xlim(axScatter.get_xlim()) #同步坐标
axHisY.set_ylim(axScatter.get_ylim()) #同步坐标
plt.show()

机器学习数据科学包——Matplotlib_第50张图片

球员能力图

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties #导入字体管理包

plt.style.use('ggplot') #设置风格
font = FontProperties(fname=r'c:\windows\fonts\simsun.ttc',size=12) #设置字体

#生成四张子图,并设为极坐标形式
ax1 = plt.subplot(221,projection='polar')
ax2 = plt.subplot(222,projection='polar')
ax3 = plt.subplot(223,projection='polar')
ax4 = plt.subplot(224,projection='polar')

#生成数据
ability_size = 6 #能力数目
ability_label = [u'进攻',u'防守',u'盘带',u'速度',u'体力',u'射术'] #能力标签
player = {
     
    'M':np.random.randint(size=ability_size,low=60,high=99),
    'H':np.random.randint(size=ability_size,low=60,high=99),
    'P':np.random.randint(size=ability_size,low=60,high=99),
    'Q':np.random.randint(size=ability_size,low=60,high=99),
} #随机生成四位球员的能力数值
theta = np.linspace(0,2*np.pi,6,endpoint=False) #生成极坐标角度
theta = np.append(theta,theta[0]) #追加一个元素,形成首位相接的闭环效果
player['M'] = np.append(player['M'],player['M'][0])
player['H'] = np.append(player['H'],player['H'][0])
player['P'] = np.append(player['P'],player['P'][0])
player['Q'] = np.append(player['Q'],player['Q'][0])

#绘制梅西能力图
ax1.plot(theta,player['M'],'r') #汇出边界框
ax1.fill(theta,player['M'],'r',alpha=0.3) #填充内部区域
ax1.set_xticks(theta) #将极坐标角度按能力数目均分显示
ax1.set_xticklabels(ability_label,y=0.01,fontproperties=font) #将角度标签替换为能力标签,设置文字与图的距离
ax1.set_title(u'梅西',position=(0.5,0.99),fontproperties=font,color='r',size=20) #设置标签,位置等
ax1.set_yticks([20,40,60,80,100]) #设置极轴的显示
#绘制哈维能力图

ax2.plot(theta,player['H'],'g') #汇出边界框
ax2.fill(theta,player['H'],'g',alpha=0.3) #填充内部区域
ax2.set_xticks(theta) #将极坐标角度按能力数目均分显示
ax2.set_xticklabels(ability_label,y=0.01,fontproperties=font) #将角度标签替换为能力标签,设置文字与图的距离
ax2.set_title(u'哈维',position=(0.5,0.99),fontproperties=font,color='g',size=20) #设置标签,位置等
ax2.set_yticks([20,40,60,80,100]) #设置极轴的显示

#绘制皮克能力图
ax3.plot(theta,player['P'],'b') #汇出边界框
ax3.fill(theta,player['P'],'b',alpha=0.3) #填充内部区域
ax3.set_xticks(theta) #将极坐标角度按能力数目均分显示
ax3.set_xticklabels(ability_label,y=0.01,fontproperties=font) #将角度标签替换为能力标签,设置文字与图的距离
ax3.set_title(u'皮克',position=(0.5,0.99),fontproperties=font,color='b',size=20) #设置标签,位置等
ax3.set_yticks([20,40,60,80,100]) #设置极轴的显示

#绘制切赫能力图
ax4.plot(theta,player['Q'],'y') #汇出边界框
ax4.fill(theta,player['Q'],'y',alpha=0.3) #填充内部区域
ax4.set_xticks(theta) #将极坐标角度按能力数目均分显示
ax4.set_xticklabels(ability_label,y=0.01,fontproperties=font) #将角度标签替换为能力标签,设置文字与图的距离
ax4.set_title(u'切赫',position=(0.5,0.99),fontproperties=font,color='y',size=20) #设置标签,位置等
ax4.set_yticks([20,40,60,80,100]) #设置极轴的显示

plt.show()

机器学习数据科学包——Matplotlib_第51张图片

你可能感兴趣的:(python,numpy)