您的位置:首页 > 编程语言 > PHP开发

matplotlib学习——数据可视化基本处理

2018-11-05 12:27 591 查看

引:现打算将曾经学习的数据处理方面的知识回顾一下,并做成笔记,从matplotlib开始记起

----环境搭建:使用Anaconda,较为方便,如果认为不需要过多的东西,可以使用pip安装
pip安装命令:

pip3 install matplotlib

Anaconda下载地址:
https://www.anaconda.com/download/

修改Anaconda中的python版本:
conda installl python='版本号'

----基本使用方法:

#导入模块
from matplotlib import pyplot as plt    #一般可命名为plt,方便使用
import random   #为后面创建坐标数据设计随机数用到
from matplotlib import font_manager

my_font = font_manager.FontProperties(fname=r'C:\Users\24015\Desktop\msyhbd.ttc')   #将字体实例化

plt.figure(figsize=(10,4),dpi=80)   #图像配置,figsize=('横','纵'),dpi='每英寸像素数量'
y_1 = [random.randint(0,10) for j in range(10)]  #随机生成10个数,在0-10内,后为纵坐标数据使用
y_2 = [random.randint(0,10) for k in range(10)]  #随机生成10个数,在0-10内,后为纵坐标数据使用
y_3 = [random.randint(0,10) for l in range(10)]  #随机生成10个数,在0-10内,后为纵坐标数据使用
y_4 = [random.randint(0,10) for m in range(10)]  #随机生成10个数,在0-10内,后为纵坐标数据使用
x = ['数量{}'.format(i) for i in range(len(y_1))]   #创建横坐标,与y轴的数据量对应

plt.plot(x,y_1,label='Y_1',linestyle='--')    #开始绘制图表1,为图表添加图例,label='名称',此处可以给线设定color,linestyle
plt.plot(x,y_2,label='Y_2',linestyle='-.')    #开始绘制图表2
plt.plot(x,y_3,label='Y_3',linestyle=':')    #开始绘制图表3
plt.plot(x,y_4,label='Y_4',linestyle='-')    #开始绘制图表4
'''
linestyle=参数
``'-'``          solid line style
``'--'``         dashed line style
``'-.'``         dash-dot line style
``':'``          dotted line style
'''
plt.legend(prop=my_font)   #为图例设置字体,此处必须用prop,和其他地方不同,图例位置参数详解:
'''
loc=参数
best : 0
upper right : 1
upper left : 2
lower left : 3
lower right : 4
right : 5
center left : 6
center reght : 7
lower center : 8
upper center : 9
center : 10
'''

#配置x轴,步长为10显示,逆时针旋转20度,旋转是为了防止x轴坐标名称过长,导致叠加,可使用fontproperties='my_font'参数调用字体
plt.xticks(range(0,11),rotation=20,fontproperties=my_font)
# 配置y轴,使其范围在y的最大和最小值间显示
plt.yticks(range(0,11),rotation=20,fontproperties=my_font)

#为x轴和y轴命名
plt.xlabel('x 轴',fontproperties=my_font)
plt.ylabel('y 轴',fontproperties=my_font)

plt.grid(alpha=0.5)  #绘制网格,alpha为网格的透明度,网格同样可以使用linestyle来改变线的风格

# plt.savefig(r'路径')   #将图片保存,可以保存为各种格式,如果要保存为矢量图,可以保存成后缀为'.svg'的文件
plt.show()   #展示生成的图片,也可以不展示

展示下生成的图片

如何绘制更多图形类型

1.散点图
绘图代码中,使用

plt.scatter()
函数,将替换上部分代码后,展示下图片结果

2.单次条形图
绘图代码中,使用
plt.bar()
函数,将替换上部分代码后,展示下图片结果(由于单次条形图只会显示值为最高的图形,会覆盖掉值低的图,因此,建议此种方式仅使用一种数据去制图。如果是多种条形图,请继续看下方多次条形图如何制作)

在绘图中,很多场景可能会考虑到将条形图横着显示,那么就要用到
plt.barh()
函数,需要注意的是,在与bar不同的是,barh的传入的位置参数与bar不同,因此需要注意一下:
下面看一下barh的部分源码

def barh(y, width, height=0.8, left=None, *, align='center', **kwargs):
return gca().barh(
y=y, width=width, height=height, left=left, align=align,
**kwargs)

再看一下bar的部分源码

def bar(x, height, width=0.8, bottom=None, *, align='center',
data=None, **kwargs):
return gca().bar(
x=x, height=height, width=width, bottom=bottom, align=align,
data=data, **kwargs)

可以看到,位置参数是不同的,所以在设置宽度的时候需要注意一下。
那么看一下修改后的图片:

3.多次条形图
多次条形图与单次条形图不同,需要注意的内容更多些,整理以下几个要点:

  1. 多个条形图插入,实际上用的原理就是x轴在绘图时错开位置,建立多个x数列,并分别绘图,则会显示出来多根线;
  2. 条形图的宽度需要控制好,最好在计算上加以限制,以免出现重叠的情况;
  3. 设置x轴时需要注意参数问题,示例
在前面代码中,是这样演示的xticks,第一个参数限制了数量:
plt.xticks(range(0,11),rotation=20)
而在多次条形图中,这种办法就不好使了,因为使x轴错位使用的是加减的方法,因此参数需要改变,x_1与上面的range(0,11)功能相同,后在跟一个坐标刻度名称的参数,这里我写了一个生成器:
plt.xticks(x_1,['数量{}'.format(i) for i in range(0,11)],rotation=20)

以下为多次条形图的代码,与前面结构略有不同:

from matplotlib import pyplot as plt    #一般可命名为plt,方便使用
import random   #为后面创建坐标数据设计随机数用到
from matplotlib import font_manager

my_font = font_manager.FontProperties(fname=r'C:\Users\24015\Desktop\msyhbd.ttc')

bar_width = 0.2
plt.figure(figsize=(10,4),dpi=80)
y_1 = [random.randint(0,10) for j in range(10)]
y_2 = [random.randint(0,10) for k in range(10)]
y_3 = [random.randint(0,10) for l in range(10)]
y_4 = [random.randint(0,10) for m in range(10)]

x_1 = [i for i in range(len(y_1))]   #生成一个x轴数列
x_2 = [i+bar_width for i in x_1]   #调用上一个x轴的数列,并加上宽度
x_3 = [i+bar_width for i in x_2]
x_4 = [i+bar_width for i in x_3]

plt.bar(x_1,y_1,label='Y_1',linestyle='--',width=bar_width)   #分别绘制图标,一定要限制宽度,以免过细或者过于重叠,建议使用计算的方式来限制
plt.bar(x_2,y_2,label='Y_2',linestyle='-.',width=bar_width)
plt.bar(x_3,y_3,label='Y_3',linestyle=':',width=bar_width)
plt.bar(x_4,y_4,label='Y_4',linestyle='-',width=bar_width)

plt.legend(prop=my_font)

plt.xticks(x_1,['数量{}'.format(i) for i in range(0,11)],rotation=20,fontproperties=my_font)
plt.yticks(range(0,11),rotation=20,fontproperties=my_font)

plt.xlabel('x 轴',fontproperties=my_font)
plt.ylabel('y 轴',fontproperties=my_font)

plt.grid(alpha=0.5)

plt.show()

展示下多次条形图的结果:

总结:

如果需要寻找更多的样式,以及设置方法,可参照官方网站,或查找源代码查看

官方网址:https://matplotlib.org/gallery/index
阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: