首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

十分钟上手matplotlib,开启你的python可视化

-为什么使用matplotlib?-

matplotlib是一个python 2D绘图库,利用它可以画出许多高质量的图像。只需几行代码即可生成直方图,条形图,饼图,散点图等。

Matplotlib可用于Python脚本,Python和IPython shell,Jupyter笔记本,Web应用程序服务器和四个图形用户界面工具包。

希望本文能帮助大家了解如何将matplotlib用于自己的可视化。

Matplotlib,pyplot和pylab?

Matplotlib是整个包,pyplot是Matplotlib中的一个模块,并且pylab是一个安装在一起的模块。

pylab和pyplot的区别是,前者将numpy导入了其命名空间中,这样会使pylab表现的和matlab更加相似。现在来说我们经常使用pyplot,因为pyplot相比pylab更加纯粹。

numpy,pandas?

matplotlib是可视化的表达,那么在图形的绘制中肯定会涉及一些数据处理。

pandas和numpy则是python中最好用的两个数据分析库,使用它们,能够解决超过90%的数据分析问题。

- matplotlib 绘图上手 -

如果你还没有安装 Python 环境,那么推荐你安装 Anaconda,对于上手 Python 来说更加简单,不容易出差错。

Anaconda 的安装教程网上很多,找到对应版本客户端安装即可。安装好后,即可在终端(cmd)安装核心库 Matplotlib。

安装 Matplotlib

python -m pip install matplotlib

然后打开 Jupyter Notebook(安装好 Anaconda 后,Jupyter 也已装好,在应用窗口中可以找到),我们就可以直接上手了。

图的构成

以上图片来自matplotlib官网,它向我们展示了matplotlib的图的构成元素。

大多数元素都比较好理解:

坐标轴(axis)、坐标轴名称(axis label)、坐标轴刻度(tick)、坐标轴刻度标签(tick label)、网格线(grid)、图例(legend)、标题(title)......

01 title设置

如果title是中文,matplotlib会乱码,这时需要加上下面这段代码:

plt.rcParams['font.sans-serif']=['SimHei']

02 Figure对象

在matplotlib中,整个图像为一个Figure对象。

在Figure对象中可以包含一个或者多个Axes对象。每个Axes(ax)对象都是一个拥有自己坐标系统的绘图区域

plt.figure(figsize=(6,3))

plt.plot(6,3)

plt.plot(3,3*2)

plt.show()

03 坐标轴及标签

plt.xlim(0,6)#x轴坐标轴

plt.ylim((0, 3))#y轴坐标轴

plt.xlabel('X')#x轴标签

plt.ylabel('Y')#y轴标签

plt.show()

如果需要将数字设为负数,也可能出现乱码的情况,这时候可以加下面的代码:

plt.rcParams['axes.unicode_minus']=False

04 设置label和legend

设置 label 和 legend 的目的就是为了区分出每个数据对应的图形名称,legend的loc参数用于设置图例位置。

plt.plot(2, 3, label="123")#第一个label

plt.plot(2, 3* 2, label="456")#第二个label

plt.legend(loc='best')#图列位置,可选best,center等

plt.show()

05 添加注释

有时候我们需要对特定的点进行标注,我们可以使用 plt.annotate 函数来实现:

s: 注释信息内容

xy:箭头点所在的坐标位置

xytext:注释内容的坐标位置

arrowprops:设置指向箭头的参数

x=np.linspace(,10,200)#从到10之间等距产生200个值

y=np.sin(x)

plt.plot(x,y,linestyle=':',color='b')

plt.annotate(s='标记点',xy=(3,np.sin(3)),xytext=(4,-0.5),weight='bold',color='b',arrowprops=dict(arrowstyle='-|>',color='k'))

plt.show()

05 使用子图

如果需要将多张子图展示在一起,可以使用 subplot() 实现。

即在调用 plot()函数之前需要先调用 subplot() 函数。

该函数的第一个参数代表子图的总行数,第二个参数代表子图的总列数,第三个参数代表活跃区域。

ax1= plt.subplot(2,2,1)

plt.plot(x,np.sin(x),'k')

ax2 = plt.subplot(2,2,2, sharey=ax1)# 与 ax1 共享y轴

plt.plot(x, np.cos(x),'g')

ax3 = plt.subplot(2,2,3)

plt.plot(x,x,'r')

ax4 = plt.subplot(2,2,4, sharey=ax3)# 与 ax3 共享y轴

plt.plot(x,2*x,'y')

- matplotlib 绘图 -

matplotlib画图可以总结为3个步骤:获取数据——画出基本图形——设置细节。

获取的数据一般包括横坐标和纵坐标的数据,这个数据可以是读取的,也可以自己生成,本文为了方便演示,使用numpy和pandas生成随机数。

matplotlib所提供的图形非常丰富,除了基本的柱状图、饼图、散点图等,还提供了极坐标图、3D图等高级图形,并且你可以自由选择和组合。

每个图形函数下都有许多参数可设置,matplotlib提供的不仅仅是图形,还有更为精细的图像表达,你可以通过细节的设置来丰富你的可视化。

01bar

柱状图

生成一个单系列的柱状图比较简单,只要确定x轴及y轴的数据,利用bar()函数就能生成:

除了单系列柱状图,matplotlib还提供了其它类型的柱状图,如多系列柱状图,堆叠图,水平向的条纹图等。

plt.plot()适用于基本图表的绘制,kind可选类型有线形图、柱状图、密度图、堆叠图、面积图等,以横纵坐标两个维度为主。

grid是显示网格,colormap是颜色展示,括号中可填颜色参数,如不填则会展示默认颜色。

想要实现堆叠效果,一定要加上stacked=true,否则输出图形就是一般的柱状图。

# 多系列堆叠图

df.plot(kind ='bar', grid =True, colormap ='Blues_r', stacked =True)

水平向的条形图调用的是barh():

与垂直柱状图一样,如果想要柱状图实现堆叠效果,则加上:stacked=true

02scatter

散点图

绘制散点图,主要用到plt.scatter()这个函数。

x,y是必填参数;

c(颜色:b--blue, c--cyan,g--green,k--black,m--magenta,r--red,w--white,y--yellow);

s:控制点的大小,默认为20);

marker:指定散点图点的形状,默认为圆形;

alpha:指定对象的透明度;

......

绘制简单的散点图:

进行简单的一些参数设置:

散点矩阵图scatter_matrix,diagonal = ''为每个指标的频率图,有kde及hist两个参数可选;

range_padding 是图像在x轴,y轴原点附近的留白,值越大,图像离坐标原点的距离越大。

03pie

饼图

matplotlib中饼图的实现用的是pie()函数,必须输入的参数是饼图每个部分的值。

部分参数解释:

使用labels为饼图加标签;

autopct 控制饼图内百分比设置

'%1.1f'指小数点前后位数(没有用空格补齐),

shadow是在饼图下画一个阴影,False即不画

sizes = [2,5,12]

labels = ['娱乐','育儿','饮食']

plt.pie(sizes,labels=labels,autopct='%1.1f%%',shadow=False,startangle=100)

plt.show()

04hist

直方图

直方图绘制为hist()函数,参数如下:

data:必选参数,绘图数据

bins:直方图的长条形数目,可选项,默认为10

normed:是否将得到的直方图向量归一化,可选项,默认为0,代表不归一化,显示频数。normed=1,表示归一化,显示频率。

facecolor:长条形的颜色

edgecolor:长条形边框的颜色

alpha:透明度

......

密度图,加上:

s.plot(kind ='kde', style ='k--')

柱状图能够实现堆叠,直方图也能实现堆叠,重点语句同样是stacked = True

05polar

极坐标图

matplotlib的pyplot子库提供了绘制极坐标图的方法。

在调用subplot()创建子图时通过设置projection='polar',便可创建一个极坐标子图,然后调用plot()在极坐标子图中绘图。

ax1= plt.subplot(121, projection='polar')

部分参数意义:

theta:角度数据

radii :极径数据

theta_direction方法用于设置极坐标的正方向

theta_zero_location方法用于设置极坐标0°位置,0°可设置在八个位置,分别为N, NW, W, SW, S, SE, E, NE

thetagrids方法用于设置极坐标角度网格线显示

theta_offset方法用于设置角度偏离

......

极区图:

极散点图:

theta= np.arange(,2*np.pi, np.pi/4)# 数据角度

r = np.arange(1,9,1)#数据极径

area =100*np.arange(1,9,1)# 数据散点面积

colors = theta

ax2 = plt.subplot(111,projection='polar')

ax2.scatter(theta, r, c=colors, s=area, cmap='hsv', alpha =.75)

06boxplot

箱型图

绘制箱线图,用plt.boxplot()这个函数。

箱型图是利用数据中的五个统计量:最小值、第一四分位数、中位数、第三四分位数与最大值来描述数据的一种方法。

它也可以粗略地看出数据是否具有有对称性,分布的分散程度等信息,特别可以用于对几个样本的比较。

箱线图各部分含义

部分参数:sym:异常值的形状 ;whis:用于调节上下垂直线的长度

生成单个箱型图:

多个箱型图:

箱型图也可以是横向的,加上vert=False即可:

07heatmap

热图

热图是数据分析的常用方法,通过色差、亮度来展示数据的差异、易于理解。matplotlib中生成热图是调用的函数imshow()。

X= [[1,2],[3,4],[5,6]]

plt.imshow(X)

plt.show()

增加颜色类标的代码是plt.colorbar():

-可视化控制-

前面我们用matplotlib绘制了许多不同类型的图像,对于基本的数据分析已经完全掌握。

但在一些细节的调节、颜色、美观度上我们没有做过多强调,matplotlib所提供的不仅仅是图形的基本绘制,它也提供了让图像展示更精细的工具。

颜色表示

八种内件颜色缩写:

b:blue

g:green

r:red

c:cyan

m:magenta

y:yellow

k:black

w:white

先用numpy生成四条线,再对四条线的颜色进行设置:

importnumpyasnp

importpandasaspd

importmatplotlib.pyplotasplt

y=np.arange(1,5)

01 简单颜色展示

plt.plot(y,color='b')

02 灰色度

plt.plot(y+1,color='0.5')#灰色 程度为0.5

03 十六进制颜色表示

十六进制颜色代码可通过百度颜色代码(对照表查找)

plt.plot(y+2,color='#FFEC8B')

04 RGB 表示

此时注意要将R,G,B每个值除以255,使其属于0~1之间,如下为红色:

plt.plot(y+3,color=(1,0,0))

效果图:

点、线样式

01 四种线型

plt.plot(y,'-')#实线

plt.plot(y+1,'--')#虚线

plt.plot(y+2,'-.')#点划线

plt.plot(y+3,':')#点线

02 点样式

plt.plot(y,'o')

plt.plot(y+1,'D')

plt.plot(y+2,'^')

plt.plot(y+3,'p')

指定marker时,会画出线段:

plt.plot(y,marker='o')

plt.plot(y+1,marker='D')

03 样式字符串

将颜色,点型,线型写成一个字符串,如:gx:,mo--等

plt.plot(y,'gx:')

plt.plot(y+1,'mo--')

plt.plot(y+2,'bp-')

保存图片

plt.savefig()# 保存

关于 matplotlib,基本的图形绘制到这里就差不多了,虽然只是最常规的图形,但是足够让你开始尝试探索数据,快速绘图并获得分析结果。

探索性数据分析的路很长,但开始足够简单,去创造属于你的图形吧。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200103A0HN4L00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券