Matplotlib入门

最近开始学习大数据分析相关的知识,刚开始学习matplotlib的内容,为了防止后面遗忘到处查资料,顾将最近学的matplotlib的基础入门的东西保留下来以便后期使用查找用。

Matplotlib概述

matplotlib是受MATLAB的启发构建的。MATLAB是数据绘图领域广泛使用的语言和工具。MATLAB语言是面向过程的。利用函数的调用,MATLAB中可以轻松的利用一行命令来绘制直线,然后再用一系列的函数调整结果。

matplotlib有一套完全仿照MATLAB的函数形式的绘图接口,在matplotlib.pyplot模块中。这套函数接口方便MATLAB用户过度到matplotlib包

使用matplotlib库绘图,原理很简单,如下5步:

  1. 创建一个图纸(figure)
  2. 在图纸上创建一个或多个绘图(plotting)区域(坐标系/轴,axes)
  3. 在plotting区域上描绘点、线等
  4. 为plotting添加修饰标签(绘图线上的或坐标轴上的)
  5. 其他各种DIY

在上面的过程中,主要就是下面三个元素:

  1. 变量
  2. 函数
  3. 图纸(figure)和坐标轴(axes)

其中,变量和函数通过改变figure和axes中的元素(例如:title,label,点和线等等)一起描述figure和axes,也就是在画布上绘图。图片结构如下所示:

Matplotlib绘出图片结构

如上图所示,一张图纸(figure)中有坐标轴(axes),title为图像标题,axis为坐标轴,label为坐标轴标注,tick为刻度线,tick label为刻度注释。

在绘图结构中,figure创建窗口,subplot创建子图。所有的绘画只能在子图上进行。plt表示当前子图,若没有就创建一个子图。所有你会看到一些教程中使用plt进行设置,一些教程使用子图属性进行设置。他们往往存在对应功能函数。

官网:http://matplotlib.org/

官网可是个好东西,在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。
xticksyticks: 为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()
3D图

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268