数据分析第一节:matplotlib 的使用方法------折线图,散点图,直方图,条形图的绘制

近些年来,随着学术界的大佬们在机器学习,深度学习,自然语言处理及数据分析等领域取得一个又一个的突破,Python的地位也不断地被提升,而Matplotlib作为python绘图时常用的一个底层图库,由于其功能强大,得到了众多python使用者的关注。这一章节我们将主要讲解散点图,直方图,折线图,条形图的绘制方法,具体说明如下:

一.  首先在我们讲解具体的绘制过程前,先要了解一下一些常用的绘图参数的设置及用法:

1)pyplot.figure(参数a,参数b,参数c,参数d......),具体解释如下()

def figure(num=None,  # autoincrement if None, else integer from 1-N
           figsize=None,  # defaults to rc figure.figsize
           dpi=None,  # defaults to rc figure.dpi
           facecolor=None,  # defaults to rc figure.facecolor
           edgecolor=None,  # defaults to rc figure.edgecolor
           frameon=True,
           FigureClass=Figure,
           clear=False,
           **kwargs
           )#来源于python官方文档

用法示例:pyplot.figure(figsize=(20,8),dpi=100,....)#设置图片大小为20*8,dpi为100;

2)pyplot.xticks(参数a,参数b,参数c,参数d......),具体解释如下:主要用于设置x轴的标签,参数a常用来传递数组的长度,参数b常用来对标签重命名,其余参数根据需要填写。pyplot.yticks类似于pyplot.xticks;

3)pyplot.xlabel(“字符串”),对坐标轴的横坐标进行声明,声明内容为字符串的内容,pyplot.ylabel(“字符串”),对坐标轴的横坐标进行声明;

4)pyplot.title(),声明图的标题名称;

5)pyplot.legend(),调用图例;

6)pyplot.grid(),绘制网格,普遍用法:pyplot.grid(alpha=0.9,linestyle='--',color=red);

7)pyplot.plot(x,y),表示绘制折线图;pyplot.scatter(x,y),表示绘制散点图; pyplot.bar(x,y),表示绘制条形图;pyplot.barh(x,y),表示绘制竖着的条形图;pyplot.hist(x,y),表示绘制直方图;需要注意的是绘制直方图时hist传递的第一个参数是数据,第二个参数为分组数

8)pyplot.show(),对绘制的图形进行展示;

9) pyplot.save(),对图片进行保存。

二. 字体配置

注意:由于Matplotlib对中文不能很好地展示,因此会出现乱码的情况,在这里首先要对字体进行配置,配置方法如下:

方法一:

from matplotlib import font_manager
_myfont=font_manager.FontProperties(fname="C:/Windows/Fonts/simhei.ttf")(这是博主的电脑路径下的字体,可以根据需要修改)

方法二:

import  matplotlib

_myfont = {'family' : 'monospace', 'weight' : 'bold', 'size' : 'larger'}

matplotlib.rc("_myfont",**font)

这里推荐方法一

三. 图形绘制

1.折线图的绘制

from matplotlib import pyplot,font_manager #调用画图包和字体包
import random
_myfont=font_manager.FontProperties(fname="C:/Windows/Fonts/simhei.ttf")#配置相关的字体
_day=range(0,61) #设置x轴的坐标点数
_datas=[random.randint(0,10) for i in _day]# 对于每一天随机生成相关数据
pyplot.figure(figsize=(15,10),dpi=100) #设置图片的大小及dpi
_xticks_label=["5月%d号"%(i+1) for i in range(31)] #设置x轴标签要显示的内容,方便xticks调用
_xticks_label+=["6月%d号"%(i+1) for i in range(30)]
pyplot.xticks(list(_day)[::1],_xticks_label[::1],rotation=-90,fontproperties=_myfont)#对x轴的内容进行配置,_xticks_label[::1] #在每天list(_day)[::1]的那个点要显示的内容,rotation内容旋转,fontproperties进行字体配置
                                                            
pyplot.plot(_day,_datas)#绘制图形
pyplot.xlabel("日期",fontproperties=_myfont,labelpad=10)#设置x轴标签的内容
pyplot.ylabel("空气状况",fontproperties=_myfont)#设置y轴标签的内容
pyplot.title("五月-六月每天的空气状况",fontproperties=_myfont) #绘制标题
pyplot.show()

2.在一张图片上显示两个图

from matplotlib import pyplot,font_manager #调用画图包和字体包
import random
_myfont=font_manager.FontProperties(fname="C:/Windows/Fonts/simhei.ttf")#配置相关的字体
_day5=range(0,31) #设置天数
_day6=range(61,91)

_datas5=[random.randint(0,5) for i in _day5]# 对于每一天随机生成相关数据
_datas6=[random.randint(0,5) for i in _day6]# 对于每一天随机生成相关数据
_days=list(_day5)+list(_day6)
pyplot.figure(figsize=(15,10),dpi=100) #设置图片的大小及dpi
_xticks_label=["5月%d号"%(i+1) for i in _day5] #设置x轴标签要显示的内容,方便xticks调用
_xticks_label+=["6月%d号"%(i-60) for i in _day6]
pyplot.plot(_day5,_datas5)#绘制图形
pyplot.plot(_day6,_datas6)
pyplot.xticks(list(_days)[::1],_xticks_label[::1],rotation=-90,fontproperties=_myfont)#对x轴的内容进行配置,_xticks_label[::1]在每天list(_days)[::1]的那个点要显示的内容,
                                                                                    # rotation内容旋转,fontproperties进行字体配置
pyplot.xlabel("日期",fontproperties=_myfont,labelpad=10)#设置x轴标签的内容
pyplot.ylabel("空气状况",fontproperties=_myfont)#设置y轴标签的内容
pyplot.title("五月-六月每天的空气状况",fontproperties=_myfont) #绘制标题
pyplot.grid(alpha=0.5)
pyplot.show()

结果:

数据分析第一节:matplotlib 的使用方法------折线图,散点图,直方图,条形图的绘制_第1张图片

3.绘制散点图

基本使用方式同1,只需要把绘图命令改成pyplot.scatter(_day,_datas)

4.绘制条形图

基本使用方式同1,只需要把绘图命令改成pyplot.bar(_day,_datas,width=0.2)#width设置条形图的宽度

5.绘制直方图

基本使用方式同1,只需要把绘图命令改成pyplot.hists(_day,_datas)#width设置条形图的宽度

但是要注意:绘制条形图时往往需要事先给定每个条的间隔bar_width,然后求所分的组数(num=(max-min)//barh_width)

但是这样处理后往往由于分配不均,而是的matplotlib绘制的图像出现错位的情况,最好的解决方法就是进行强制调整。例子展示如下

如果直接绘制会出现如下情况

from matplotlib import pyplot,font_manager
_myfont=font_manager.FontProperties(fname="C:/Windows/Fonts/simhei.ttf")
a=[11,  18, 15, 11, 24, 13, 31, 27, 8, 11, 2, 13, 40,4, 55, 1, 2, 4, 14]
bar_width=4;#设置组距
num=(max(a)-min(a))//bar_width#求分组数
pyplot.hist(a,num,normed=1)
pyplot.xticks(range(min(a),max(a)+bar_width,bar_width))
pyplot.grid()
pyplot.show()

数据分析第一节:matplotlib 的使用方法------折线图,散点图,直方图,条形图的绘制_第2张图片

因此需要对代hist()函数中的第二个参数进行修改

from matplotlib import pyplot,font_manager
_myfont=font_manager.FontProperties(fname="C:/Windows/Fonts/simhei.ttf")
a=[11,  18, 15, 11, 24, 13, 31, 27, 8, 11, 2, 13, 40,4, 55, 1, 2, 4, 14]
bar_width=4;#设置组距
num=(max(a)-min(a))//bar_width#求分组数
pyplot.hist(a,[min(a)+bar_width*i for i in range(num)],normed=1)#hist的第二个参数传递的是组距,可以是数组
pyplot.xticks(range(min(a),max(a)+bar_width,bar_width))
pyplot.grid()
pyplot.show()

数据分析第一节:matplotlib 的使用方法------折线图,散点图,直方图,条形图的绘制_第3张图片

 

 

你可能感兴趣的:(python,matplotlib,绘图,数据分析,一张图上绘制两个图形,直方图错位,matplotlib使用)