Matplotlib入门
最近开始学习大数据分析相关的知识,刚开始学习matplotlib的内容,为了防止后面遗忘到处查资料,顾将最近学的matplotlib的基础入门的东西保留下来以便后期使用查找用。
Matplotlib概述
matplotlib是受MATLAB的启发构建的。MATLAB是数据绘图领域广泛使用的语言和工具。MATLAB语言是面向过程的。利用函数的调用,MATLAB中可以轻松的利用一行命令来绘制直线,然后再用一系列的函数调整结果。
matplotlib有一套完全仿照MATLAB的函数形式的绘图接口,在matplotlib.pyplot模块中。这套函数接口方便MATLAB用户过度到matplotlib包
使用matplotlib库绘图,原理很简单,如下5步:
- 创建一个图纸(figure)
- 在图纸上创建一个或多个绘图(plotting)区域(坐标系/轴,axes)
- 在plotting区域上描绘点、线等
- 为plotting添加修饰标签(绘图线上的或坐标轴上的)
- 其他各种DIY
在上面的过程中,主要就是下面三个元素:
- 变量
- 函数
- 图纸(figure)和坐标轴(axes)
其中,变量和函数通过改变figure和axes中的元素(例如:title,label,点和线等等)一起描述figure和axes,也就是在画布上绘图。图片结构如下所示:

如上图所示,一张图纸(figure)中有坐标轴(axes),title为图像标题,axis为坐标轴,label为坐标轴标注,tick为刻度线,tick label为刻度注释。
在绘图结构中,figure创建窗口,subplot创建子图。所有的绘画只能在子图上进行。plt表示当前子图,若没有就创建一个子图。所有你会看到一些教程中使用plt进行设置,一些教程使用子图属性进行设置。他们往往存在对应功能函数。
官网可是个好东西,在Matplotlib官网中就像Echarts官网一样提供了很多的示例,可以供我们参考和使用。
Matplotlib 介绍
引用库
from matplotlib import pyplot as plt
通常我们引用matplotlib画图都是通过上面这种形式导包的。
常用绘制方法
几个常见的matplotlib图形绘制方法
•画一个折线图:
plt.plot()
•画一个柱状图:plt.bar()
•画一个条形图:plt.barh()
•画一个直方图:plt.hist()
•画一个饼图:plt.pie()
•画一个散点图:plt.scatter()
•画一个堆叠图:plt. stackplot()
面板
Figure
:面板(图),matplotlib中的所有图像都是位于figure对象中,一个图像只能有一个figure对象。
Subplot
:子图,figure对象下创建一个或多个subplot对象(即axes)用于绘制图像。
配置参数:
axex
: 设置坐标轴边界和表面的颜色、坐标刻度值大小和网格的显示
figure
: 控制dpi(dpi
)、边界颜色(color
)、图形大小(figsize
)、和子区( subplot)设置
font
: 字体集(font family)、字体大小和样式设置
grid
: 设置网格颜色和线性
legend
: 设置图例和其中的文本的显示
line
: 设置线条(颜色、线型、宽度等)和标记
patch
: 是填充2D空间的图形对象,如多边形和圆。控制线宽、颜色和抗锯齿设置等。
savefig
: 可以对保存的图形进行单独设置。例如,设置渲染的文件的背景为白色。
verbose
: 设置matplotlib在执行期间信息输出,如silent、helpful、debug和debug-annoying。
xticks
和yticks
: 为x,y轴的主刻度和次刻度设置颜色、大小、方向,以及标签大小。
线条相关属性标记设置
线条风格linestyle或ls | 描述 |
---|---|
‘-‘ | 实线 |
‘:’ | 虚线 |
‘–’ | 破折线 |
‘None’,’ ‘,’’ | 什么都不画 |
‘-.’ | 点划线 |
线条标记
标记maker 描述
‘o’ 圆圈
‘.’ 点
‘D’ 菱形
‘s’ 正方形
‘h’ 六边形1
‘*’ 星号
‘H’ 六边形2
‘d’ 小菱形
‘_’ 水平线
‘v’ 一角朝下的三角形
‘8’ 八边形
‘<’ 一角朝左的三角形
‘p’ 五边形
‘>’ 一角朝右的三角形
‘,’ 像素
‘^’ 一角朝上的三角形
‘+’ 加号
‘\ ‘ 竖线
‘None’,’’,’ ‘ 无
‘x’ X
颜色
别名 颜色
b 蓝色
g 绿色
r 红色
y 黄色
c 青色
k 黑色
m 洋红色
w 白色
如果这两种颜色不够用,还可以通过两种其他方式来定义颜色值:
1、使用HTML十六进制字符串 color=’#123456’
使用合法的HTML颜色名字(’red’
,’chartreuse’
等)。
2、也可以传入一个 归一化 到[0,1]
的RGB元祖。 color=(0.3,0.3,0.4)
背景色
通过向如matplotlib.pyplot.axes()或者matplotlib.pyplot.subplot()这样的方法提供一个axisbg参数,可以指定坐标这的背景色。
subplot(111,axisbg=(0.1843,0.3098,0.3098))
摘录 - 绘图操作步骤(以点图、线图为例)
#使用numpy产生数据
x=np.arange(-5,5,0.1)
y=x*3
#创建窗口、子图
#方法1:先创建窗口,再创建子图。(一定绘制)
fig = plt.figure(num=1, figsize=(15, 8),dpi=80) #开启一个窗口,同时设置大小,分辨率
ax1 = fig.add_subplot(2,1,1) #通过fig添加子图,参数:行数,列数,第几个。
ax2 = fig.add_subplot(2,1,2) #通过fig添加子图,参数:行数,列数,第几个。
print(fig,ax1,ax2)
#方法2:一次性创建窗口和多个子图。(空白不绘制)
fig,axarr = plt.subplots(4,1) #开一个新窗口,并添加4个子图,返回子图数组
ax1 = axarr[0] #通过子图数组获取一个子图
print(fig,ax1)
#方法3:一次性创建窗口和一个子图。(空白不绘制)
ax1 = plt.subplot(1,1,1,facecolor='white') #开一个新窗口,创建1个子图。facecolor设置背景颜色
print(ax1)
#获取对窗口的引用,适用于上面三种方法
# fig = plt.gcf() #获得当前figure
# fig=ax1.figure #获得指定子图所属窗口
# fig.subplots_adjust(left=0) #设置窗口左内边距为0,即左边留白为0。
#设置子图的基本元素
ax1.set_title('python-drawing') #设置图体,plt.title
ax1.set_xlabel('x-name') #设置x轴名称,plt.xlabel
ax1.set_ylabel('y-name') #设置y轴名称,plt.ylabel
plt.axis([-6,6,-10,10]) #设置横纵坐标轴范围,这个在子图中被分解为下面两个函数
ax1.set_xlim(-5,5) #设置横轴范围,会覆盖上面的横坐标,plt.xlim
ax1.set_ylim(-10,10) #设置纵轴范围,会覆盖上面的纵坐标,plt.ylim
xmajorLocator = MultipleLocator(2) #定义横向主刻度标签的刻度差为2的倍数。就是隔几个刻度才显示一个标签文本
ymajorLocator = MultipleLocator(3) #定义纵向主刻度标签的刻度差为3的倍数。就是隔几个刻度才显示一个标签文本
ax1.xaxis.set_major_locator(xmajorLocator) #x轴 应用定义的横向主刻度格式。如果不应用将采用默认刻度格式
ax1.yaxis.set_major_locator(ymajorLocator) #y轴 应用定义的纵向主刻度格式。如果不应用将采用默认刻度格式
ax1.xaxis.grid(True, which='major') #x坐标轴的网格使用定义的主刻度格式
ax1.yaxis.grid(True, which='major') #x坐标轴的网格使用定义的主刻度格式
ax1.set_xticks([]) #去除坐标轴刻度
ax1.set_xticks((-5,-3,-1,1,3,5)) #设置坐标轴刻度
ax1.set_xticklabels(labels=['x1','x2','x3','x4','x5'],rotation=-30,fontsize='small') #设置刻度的显示文本,rotation旋转角度,fontsize字体大小
plot1=ax1.plot(x,y,marker='o',color='g',label='legend1') #点图:marker图标
plot2=ax1.plot(x,y,linestyle='--',alpha=0.5,color='r',label='legend2') #线图:linestyle线性,alpha透明度,color颜色,label图例文本
ax1.legend(loc='upper left') #显示图例,plt.legend()
ax1.text(2.8, 7, r'y=3*x') #指定位置显示文字,plt.text()
ax1.annotate('important point', xy=(2, 6), xytext=(3, 1.5), #添加标注,参数:注释文本、指向点、文字位置、箭头属性
arrowprops=dict(facecolor='black', shrink=0.05),
)
#显示网格。which参数的值为major(只绘制大刻度)、minor(只绘制小刻度)、both,默认值为major。axis为'x','y','both'
ax1.grid(b=True,which='major',axis='both',alpha= 0.5,color='skyblue',linestyle='--',linewidth=2)
axes1 = plt.axes([.2, .3, .1, .1], facecolor='y') #在当前窗口添加一个子图,rect=[左, 下, 宽, 高],是使用的绝对布局,不和以存在窗口挤占空间
axes1.plot(x,y) #在子图上画图
plt.savefig('aa.jpg',dpi=400,bbox_inches='tight') #savefig保存图片,dpi分辨率,bbox_inches子图周边白色空间的大小
plt.show() #打开窗口,对于方法1创建在窗口一定绘制,对于方法2方法3创建的窗口,若坐标系全部空白,则不绘制
plot时可以设置的属性包括如下:
属性 值类型
alpha 浮点值
animated [True / False]
antialiased or aa [True / False]
clip_box matplotlib.transform.Bbox 实例
clip_on [True / False]
clip_path Path 实例, Transform,以及Patch实例
color or c 任何 matplotlib 颜色
contains 命中测试函数
dash_capstyle ['butt' / 'round' / 'projecting']
dash_joinstyle ['miter' / 'round' / 'bevel']
dashes 以点为单位的连接/断开墨水序列
data (np.array xdata, np.array ydata)
figure matplotlib.figure.Figure 实例
label 任何字符串
linestyle or ls [ '-' / '--' / '-.' / ':' / 'steps' / ...]
linewidth or lw 以点为单位的浮点值
lod [True / False]
marker [ '+' / ',' / '.' / '1' / '2' / '3' / '4' ]
markeredgecolor or mec 任何 matplotlib 颜色
markeredgewidth or mew 以点为单位的浮点值
markerfacecolor or mfc 任何 matplotlib 颜色
markersize or ms 浮点值
markevery [ None / 整数值 / (startind, stride) ]
picker 用于交互式线条选择
pickradius 线条的拾取选择半径
solid_capstyle ['butt' / 'round' / 'projecting']
solid_joinstyle ['miter' / 'round' / 'bevel']
transform matplotlib.transforms.Transform 实例
visible [True / False]
xdata np.array
ydata np.array
zorder 任何数值
绘图实例
折线图
import random
from matplotlib import pyplot as plt
from matplotlib import font_manager
# 指定中文字体
my_font = font_manager.FontProperties(fname=r"D:\pytest\untitled1\data_learn\msyh.ttc")
# 指定x的值
x = [i for i in range(50)]
y_1 = [random.randint(10, 100) for _ in range(50)]
y_2 = [random.randint(30, 80) for _ in range(50)]
# 指定画图的大小
plt.figure(figsize=(20, 8), dpi=80)
# 画图
plt.plot(x, y_2, label='测试数据', c='orange')
plt.plot(x, y_1, label='测试数据', color='#a81878', ls=':') # c=color 也可以使用'#a81878'
# x轴转换为中文显示,并旋转90度
plt.xticks(x[::3], ['测试点{}'.format(i+1) for i in range(50)][::3], color='r',fontproperties=my_font, rotation=30)
plt.yticks([x for x in range(0, 101, 2)][::5], ['高度{}'.format(i) for i in range(0, 101, 2)][::5], color='g',fontproperties=my_font)
plt.title('折线图测试', fontproperties=my_font, fontsize=20)
# 设置X轴,Y轴显示标题
plt.xlabel('X轴', fontproperties=my_font, fontsize=14, color='r')
plt.ylabel('Y轴', fontproperties=my_font, fontsize=14, color='g')
# 绘制网格alpha表示透明度,ls=linestyle表示线条风格
plt.grid(alpha=0.5, ls='-.')
# 添加图例
plt.legend(prop=my_font, loc='upper right')
# plt.legend(prop=my_font, loc=5) # 位置也可以用数字代替
# 显示图片
plt.show()

散点图
plt.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, verts=None, edgecolors=None, hold=None, data=None, **kwargs)
参数说明:
x,y:array_like,shape(n,)
输入数据
s:标量或array_like,shape(n,),可选
大小以点数^ 2。默认是`rcParams ['lines.markersize'] ** 2`。
c:颜色,顺序或颜色顺序,可选,默认:'b'
`c`可以是单个颜色格式的字符串,也可以是一系列颜色
规范的长度为`N`,或一系列`N`数字
使用通过kwargs指定的`cmap`和`norm`映射到颜色
(见下文)。请注意,`c`不应该是单个数字RGB或
RGBA序列,因为这与数组无法区分
值将被彩色映射。 `c`可以是一个二维数组,其中的
行是RGB或RGBA,但是,包括单个的情况
行为所有点指定相同的颜色。
marker:`〜matplotlib.markers.MarkerStyle`,可选,默认值:'o'
请参阅`〜matplotlib.markers`以获取有关不同的更多信息
标记分散支持的样式。 `marker`可以是
该类的实例或特定文本的简写
标记。
cmap:`〜matplotlib.colors.Colormap`,可选,默认:无
一个`〜matplotlib.colors.Colormap`实例或注册名称。
`cmap`仅在`c`是浮点数组时使用。如果没有,
默认为rc`image.cmap`。
norm:`〜matplotlib.colors.Normalize`,可选,默认:无
`〜matplotlib.colors.Normalize`实例用于缩放
亮度数据为0,1。`norm`只有在`c`是一个数组时才被使用
彩车。如果`None',则使用默认值:func:`normalize`。
vmin,vmax:标量,可选,默认值:无
`vmin`和`vmax`与`norm`结合使用来标准化
亮度数据。如果其中任何一个都是`无',那么最小和最大的
使用颜色数组。请注意,如果你通过一个“规范”实例,你的
`vmin`和`vmax`的设置将被忽略。
alpha:标量,可选,默认值:无
alpha混合值,介于0(透明)和1(不透明)之间,
linewidths:标量或array_like,可选,默认值:无
如果无,则默认为(lines.linewidth,)。
verts:(x,y)的序列,可选
如果`marker`为None,这些顶点将用于
构建标记。标记的中心位于
在(0,0)为标准化单位。整体标记重新调整
由``s``完成。
edgecolors :颜色或颜色顺序,可选,默认值:无
如果无,则默认为'face'
如果'face',边缘颜色将永远是相同的
脸色。
如果它是'none',补丁边界不会
被画下来。
对于未填充的标记,“edgecolors”kwarg
被忽视并被迫在内部“面对”。
实例:
import random
from matplotlib import pyplot as plt
from matplotlib import font_manager
# 指定中文字体
my_font = font_manager.FontProperties(fname=r"D:\pytest\untitled1\data_learn\msyh.ttc")
# 指定x的值
x = [i for i in range(50)]
y_1 = [random.randint(10, 100) for _ in range(50)]
y_2 = [random.randint(30, 80) for _ in range(50)]
# 指定画图的大小
plt.figure(figsize=(20, 8), dpi=80)
# 绘制第一个图 参数代表:行数,列数,第几个
plt.subplot(1, 2, 1)
# 画图
plt.scatter(x, y_2, label='测试数据', c='orange')
plt.scatter(x, y_1, label='测试数据', color='#a81878', cmap=plt.cm.Blues, edgecolor='none', s=40) # c=color 也可以使用'#a81878'
# x轴转换为中文显示,并旋转90度
plt.xticks(x[::3], ['测试点{}'.format(i + 1) for i in range(50)][::3], color='r', fontproperties=my_font, rotation=30)
plt.yticks([x for x in range(0, 101, 2)][::5], ['高度{}'.format(i) for i in range(0, 101, 2)][::5], color='g',
fontproperties=my_font)
plt.title('折线图测试', fontproperties=my_font, fontsize=20)
# 设置X轴,Y轴显示标题
plt.xlabel('X轴', fontproperties=my_font, fontsize=14, color='r')
plt.ylabel('Y轴', fontproperties=my_font, fontsize=14, color='g')
# 绘制网格alpha表示透明度,ls=linestyle表示线条风格
plt.grid(alpha=0.5, ls='--')
plt.legend(prop=my_font, loc=1)
# 绘制第二个图 参数代表:行数,列数,第几个
plt.subplot(1, 2, 2)
x_values = range(-1000, 1001)
y_values = [x ** 2 for x in x_values]
y_values1 = [x * (x + x) for x in x_values]
plt.scatter(x_values, y_values, c=y_values, label='测试一', cmap=plt.cm.Blues, edgecolor='none', s=10)
plt.scatter(x_values, y_values1, c=y_values1, label='测试二', cmap=plt.cm.Reds, edgecolor='none', s=40)
plt.title("Square Numbers", fontsize=24)
plt.xlabel("Value", fontsize=14)
plt.ylabel("Square of Value", fontsize=14)
plt.tick_params(axis='both', which='major', labelsize=14)
# 绘制网格alpha表示透明度,ls=linestyle表示线条风格
plt.grid(alpha=0.5, ls='-.')
# 添加图例
# plt.legend(prop=my_font, loc='upper right')
plt.legend(prop=my_font, loc=5) # 位置也可以用数字代替
# 显示图片
plt.show()

饼图
plt.pie(x, explode=None, labels=None,colors=(‘b’, ‘g’, ‘r’, ‘c’, ‘m’, ‘y’, ‘k’, ‘w’),autopct=None, pctdistance=0.6, shadow=False,labeldistance=1.1, startangle=None, radius=None,counterclock=True, wedgeprops=None, textprops=None,center = (0, 0), frame = False, hold = None, data = None )
参数说明:
x :(每一块)的比例,如果sum(x) > 1会使用sum(x)归一化;
labels :(每一块)饼图外侧显示的说明文字;
explode :(每一块)离开中心距离;
startangle :起始绘制角度,默认图是从x轴正方向逆时针画起,如设定=90则从y轴正方向画起;
shadow :在饼图下面画一个阴影。默认值:False,即不画阴影;
labeldistance :label标记的绘制位置,相对于半径的比例,默认值为1.1, 如<1则绘制在饼图内侧;
autopct :控制饼图内百分比设置,可以使用format字符串或者format function
'%1.1f'指小数点前后位数(没有用空格补齐);
pctdistance :类似于labeldistance,指定autopct的位置刻度,默认值为0.6;
radius :控制饼图半径,默认值为1;
counterclock :指定指针方向;布尔值,可选参数,默认为:True,即逆时针。将值改为False即可改为顺时针。
wedgeprops :字典类型,可选参数,默认值:None。参数字典传递给wedge对象用来画一个饼图。例如:wedgeprops={'linewidth':3}设置wedge线宽为3。
textprops :设置标签(labels)和比例文字的格式;字典类型,可选参数,默认值为:None。传递给text对象的字典参数。
center :浮点类型的列表,可选参数,默认值:(0,0)。图标中心位置。
frame :布尔类型,可选参数,默认值:False。如果是true,绘制带有表的轴框架。
rotatelabels :布尔类型,可选参数,默认为:False。如果为True,旋转每个label到指定的角度。
实例:
from matplotlib import pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] # 将图表内容字体设置为黑体,可以正常显示中文
ratios = [0.1, 0.2, 0.15, 0.15, 0.4] # 存放比例列表
colors = ['peru', 'coral', 'salmon', 'yellow', 'grey'] # 存放颜色列表,与比例相匹配
labels = ["流行", 'classic', 'pop', '纯音乐', 'blue'] # 存放各类元素标签
explode = (0, 0.1, 0, 0, 0.08)
plt.pie(ratios, explode=explode, colors=colors, labels=labels) # 绘制饼图
plt.title('歌单音乐种类百分比')
plt.axis('equal') # 将饼图显示为正圆形
plt.show()

柱状图
plt.bar(left, height, alpha=1, width=0.8, color=, edgecolor=, label=, lw=3)
参数说明:
x : sequence of scalars 数据源
height : scalar or sequence of scalars bar的高度
width : scalar or array-like, optional bar的宽度,默认0.8
bottom : scalar or array-like, optional y轴的基准,默认0
align : {‘center’, ‘edge’}, optional, default: ‘center’ x轴的位置,默认中间,edge表示将bar的左边与x对齐
color : scalar or array-like, optional bar颜色
edgecolor : scalar or array-like, optional 边颜色
linewidth : scalar or array-like, optional 边的宽度,0表示无边框
tick_label : string or array-like, optional 标签,默认无,使用数字标签
xerr, yerr : scalar or array-like of shape(N,) or shape(2,N), optional : 误差线
ecolor : scalar or array-like, optional, default: ‘black’ 误差线的颜色,默认黑
capsize : scalar, optional 误差线的长度,默认无,自动获取
error_kw : dict, optional 通过字典项传递错误bar
log : bool, optional, default: False 为真表示y轴以log对象做刻度,默认假
orientation : {‘vertical’, ‘horizontal’}, optional 垂直还是水平,默认垂直
实例:
# -*- coding: utf-8 -*-
# @Time : 2019/10/25 15:30
# @Author :
# @Site :
# @File : bar1.py
# @Software: PyCharm
import random
from matplotlib import pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.figure(figsize=(20, 8), dpi=80)
plt.subplot(1, 2, 1)
x_value = range(20)
y_value = [random.randint(10, 50) for _ in x_value]
plt.bar(x_value, y_value, label="测试数据一", width=0.8, lw=0, color='b')
plt.xticks(x_value, range(1, 21))
plt.title('竖向柱状图')
plt.grid(alpha=0.5)
plt.legend(loc='upper right')
plt.subplot(1, 2, 2)
x_value = range(20)
y_value = [random.randint(10, 50) for _ in x_value]
plt.barh(x_value, y_value, label="测试数据二", height=0.5, lw=0, color='g')
plt.yticks(x_value, range(1, 21))
plt.title('横向柱状图')
plt.grid(alpha=0.5)
plt.legend(loc='upper right')
plt.show()

直方图
plt.hist (x, bins=10, range=None, normed=False, weights=None, cumulative=False, bottom=None, histtype=’bar’, align=’mid’, orientation=’vertical’, rwidth=None, log=False, color=None, label=None, stacked=False, hold=None, data=None, **kwargs)
参数说明:
x : (n,) array or sequence of (n,) arrays 数据源
bins : integer or array_like 分块数,默认10
range : tuple or None, optional 画图范围,接收元组
normed : boolean, optional 概率分布,是否正则化
weights : (n, ) array_like or None, optional 均一化相关
cumulative : boolean, optional 每一列累加
bottom : array_like, scalar, or None bin的基线
histtype : {‘bar’, ‘barstacked’, ‘step’, ‘stepfilled’}, optional 画图的形状,默认是bar
align : {‘left’, ‘mid’, ‘right’}, optional bar中心位置,默认中间
orientation : {‘horizontal’, ‘vertical’},optional 水平或垂直,默认垂直
rwidth : scalar or None, optional bar的宽度
log : boolean, optional 是否启用对数作为刻度
color : color or array_like of colors or None, optional 表示bar的颜色
label : string or None, optional bar的标签;也可以在图例中写plt.legend()
stacked : boolean, optional 是否接收多个输入源
实例:
from matplotlib import pyplot as plt, font_manager
my_font = font_manager.FontProperties(fname=r"D:\pytest\untitled1\data_learn\msyh.ttc")
plt.figure(figsize=(20, 8), dpi=80)
time = [131, 98, 125, 131, 124, 139, 131, 117, 128, 108, 135, 138, 131, 102, 107, 114, 119, 128, 121, 142, 127, 130,
124, 101, 110, 116, 117, 110, 128, 128, 115, 99, 136, 126, 134, 95, 138, 117, 111, 78, 132, 124, 113, 150, 110,
117, 86, 95, 144, 105, 126, 130, 126, 130, 126, 116, 123, 106, 112, 138, 123, 86, 101, 99, 136, 123, 117, 119,
105, 137, 123, 128, 125, 104, 109, 134, 125, 127, 105, 120, 107, 129, 116, 108, 132, 103, 136, 118, 102, 120,
114, 105, 115, 132, 145, 119, 121, 112, 139, 125, 138, 109, 132, 134, 156, 106, 117, 127, 144, 139, 139, 119,
140, 83, 110, 102, 123, 107, 143, 115, 136, 118, 139, 123, 112, 118, 125, 109, 119, 133, 112, 114, 122, 109,
106, 123, 116, 131, 127, 115, 118, 112, 135, 115, 146, 137, 116, 103, 144, 83, 123, 111, 110, 111, 100, 154,
136, 100, 118, 119, 133, 134, 106, 129, 126, 110, 111, 109, 141, 120, 117, 106, 149, 122, 122, 110, 118, 127,
121, 114, 125, 126, 114, 140, 103, 130, 141, 117, 106, 114, 121, 114, 133, 137, 92, 121, 112, 146, 97, 137, 105,
98, 117, 112, 81, 97, 139, 113, 134, 106, 144, 110, 137, 137, 111, 104, 117, 100, 111, 101, 110, 105, 129, 137,
112, 120, 113, 133, 112, 83, 94, 146, 133, 101, 131, 116, 111, 84, 137, 115, 122, 106, 144, 109, 123, 116, 111,
111, 133, 150]
bins = 2
group = int((max(time) - min(time)) / bins)
# plt.hist(time, group, normed=1)
plt.hist(time, group)
# 指定刻度的范围以及时长
plt.xticks(list(range(min(time), max(time)))[::2])
plt.xlabel("电影时长大小", fontproperties=my_font)
plt.ylabel("电影的数据量", fontproperties=my_font)
# 表格中的网状线
plt.grid(True, linestyle='--', alpha=0.8)
plt.show()

柱状图实现的直方图
import random
from matplotlib import pyplot as plt
bar_with = 1
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.figure(figsize=(20, 8), dpi=80)
x_value = range(50)
y_value = [random.randint(10, 50) for _ in x_value]
plt.bar(x_value, y_value, width=bar_with)
plt.xticks(
[i - bar_with / 2 for i in range(0, 51)],
range(0, 51)
)
plt.title('bar实现的直方图', fontsize=20)
plt.show()

import numpy as np
from matplotlib import pyplot as plt
from mpl_toolkits.mplot3d import axes3d
n = 1000
x, y = np.meshgrid(np.linspace(-3, 3, n), np.linspace(-3, 3, n))
z = (1 - x / 2 + x ** 5 + y ** 3) * np.exp(-x ** 2 - y ** 2)
plt.figure('3D 装逼图', figsize=(10, 10), dpi=80, facecolor='lightgray')
plt.title('3D 装逼图', fontsize=18)
plt.grid(linestyle=":")
ax3d = plt.gca(projection='3d')
ax3d.set_xlabel('X', fontsize=12)
ax3d.set_ylabel('y', fontsize=12)
ax3d.set_zlabel('z', fontsize=12)
ax3d.plot_wireframe(x, y, z, rstride=30, cstride=30, linewidth=0.5, cmap='jet')
plt.show()

总的来说 matplotlib 其实不难,难的是方法,参数太多,难记住,不能记住就不能用好,不过好在源码中注释还算详细,所以在使用matplotlib画图的时候要好好的把源码利用起来。