python绘图库seaborn_python绘图库——Matplotlib及Seaborn使用(入门篇1)

在数据分析过程中,数据及模型可视化是无可避免的,同时这也是展示我们数据分析成果的最佳方式。因此,熟悉掌握绘图库的使用,对精进我们的数据分析技能起着不可替代的作用。

今天,我们就来了解一下python强大的绘图库——Matplotlib及Seaborn的使用。

首先我们先来了解一下这两个强大的库。

Matplotlib

支持 Python 语言的开源绘图库(可以说是python里最优秀的绘图库了),因为其支持丰富的绘图类型、简单的绘图方式以及完善的接口文档,深受 Python 工程师、科研学者、数据工程师等各类人士的喜欢。

Seaborn

是以 Matplotlib 为核心的高阶绘图库,无需经过复杂的自定义即可绘制出更加漂亮的图形,非常适合用于数据可视化探索。

(两者的联系?区别?)

Matplotlib 应该是基于 Python 语言最优秀的绘图库了,但是它也有一个十分令人头疼的问题,那就是太过于复杂了。3000 多页的官方文档,上千个方法以及数万个参数,属于典型的你可以用它做任何事,但又无从下手。尤其是,当你想通过 Matplotlib 调出非常漂亮的效果时,往往会伤透脑筋,非常麻烦。

Seaborn 基于 Matplotlib 核心库进行了更高阶的 API 封装,可以让你轻松地画出更漂亮的图形。Seaborn 的漂亮主要体现在配色更加舒服、以及图形元素的样式更加细腻。

一句话:

Matplotlib是python绘图的基础,而Seaborn是在基础上,针对实际工作进一步的精炼与提升~

我们还是要从基础开始说起:

1、首先,导入库:

from matplotlib import pyplot as plt

pyplot模块是 Matplotlib 最核心的模块,几乎所有样式的 2D 图形都是经过该模块绘制出来的。

在这里,将pyplot 缩写成 plt,是约定俗成的方式(大家都是这么用的~)

这里有个要注意的~

在Jupyter Notebook 里使用Matplotlib绘图时,要加上下面这一条代码:

%matplotlib inline

注:

这条命令的作用是将 Matplotlib 绘制的图形嵌入在当前页面中。而在桌面环境中绘图时,不需要添加此命令,而是在全部绘图代码之后追加plt.show( )。

2、画个最简单的折线图:

a=[1,2,3,4,5,6,7,6,5,4,3,2,1]

plt.plot(a)

在这里,我们导入了一个列表,Matplotlib 会默认将该列表作为y值,而x值会从0开始依次递增。而plt.plot( )是pyplot模块下绘制(折线图)的方法类。

一个简单的折线图就绘制出来了~

我们也可以自己定义横坐标:

a_x=[11,12,13,14,15,16,17,18,19,20,21,22,23]

plt.plot(a_x,a)

当然了,这是一个最最简单的例子,在 Matplotlib 中,还有各式各样很有趣的图,大部分图形样式的绘制方法都存在于pyplot模块中,我们只要更改后面的方法类名就可以更改图形的样式啦~

这里是一些常用的图:

柱状图:pyplot.bar

直方图:pyplot.barh

水平直方图:pyplot.broken_barh

等高线图:pyplot.contour

误差线:pyplot.errorbar

柱形图:pyplot.hist

水平柱状图:pyplot.hist2d

饼状图:pyplot.pie

量场图:pyplot.quiver

散点图:pyplot.scatter

我们还是以原来的数据为例,看看其他图的效果:

柱状图:

水平直方图:

我们还可以用plot画一个常见的正弦函数图:

import numpy as np

# 在 -2PI 和 2PI 之间等间距生成 1000 个值,也就是 X 坐标

x = np.linspace(-2*np.pi, 2*np.pi, 1000)

# 计算 y 坐标

y = np.sin(x)

plt.plot(x, y)

注意了~

尽管我们绘制出来的函数很像一条曲线,但实际上,在两点之间依旧是直线。这里看起来像曲线,是因为样本点相互挨得很近(我们取的是1000个点,因此会挨得很近)。

2、会最基本的绘制操作后,我们需要对我们的图形进行进一步的优化(让图更美观~)

在matplotlib里,我们可以通过设置参数,来达到美化的效果。

下面是在折线图里,一些比较常用的参数:

alpha=设置线型的透明度,从 0.0 到 1.0

color=设置线型的颜色

fillstyle=设置线型的填充样式

linestyle=设置线型的样式

linewidth=设置线型的宽度

marker=设置标记点的样式

想要了解更多参数的小伙伴可以到官网看看哦(包括查看其它图形的)~https://matplotlib.org/3.1.0/api/_as_gen/matplotlib.pyplot.plot.html​matplotlib.org

我们还是用原来的正弦函数来试验一下,这次再加上一条余弦函数。

x= np.linspace(-2 * np.pi, 2 * np.pi, 1000)

y1 = np.sin(x)

y2 = np.cos(x)

plt.plot(x, y1, color='r', linestyle='--', linewidth=2, alpha=0.7)

plt.plot(x, y2, color='g', linewidth=2)

看上去好像挺不错的样子~

下面我们用饼状图来做个小例子(效果会更明显哦~)

首先我们先简单地绘制一个饼图:

list_pie=[2,4,6,8,10]

plt.pie(list_pie)

下面,我们进行参数设置:

explode = (0, 0, 0.1, 0, 0.2) # 各类别的偏移半径

color = ['b', 'y', 'g', 'r', 'g']

plt.pie(list_pie, colors=color, explode=explode,

shadow=True, autopct='%1.1f%%') #设置阴影,偏移度,颜色

# 饼状图呈正圆

plt.axis('equal')

对比一下,是不是瞬间高大上了~

3、同时绘制多个图形(组合图形)

x=[1,2,3,4,5,6,7]

y1=[3,6,9,12,9,6,3]

y2=[2,9,11,8,6,4,3]

plt.bar(x, y1)

plt.plot(x, y2, '-o', color='r')

在这里,y1是柱状图,y2是折线图。只要将两个图形的代码放置在一起就可以绘制成组合图形了。

注意~

并不是任何的代码放在一起都是组合图。两张图的横坐标必须共享,才能够被 Matplotlib 自动判断为组合图效果~

4、确立图形位置

首先我们来看看这个图:

和我们日常的画架结构一样,在Matplotlib 中,也是有类似“画板”和“画布”的区别的。

figure:相当于绘画用的画板,

axes:相当于铺在画板上的画布。

也就是说,在同一块画板上,我们可以设置不同的画布,用来展示不同的图片。

让我们先来看一个小例子:

x= np.linspace(-2 * np.pi, 2 * np.pi, 1000)

y1 = np.sin(x)

y2 = np.cos(x)

fig = plt.figure() # 新建画板

axes1 = fig.add_axes([0.1, 0.1, 0.9, 0.9]) # 大画布

axes2 = fig.add_axes([0.2, 0.2, 0.3, 0.2]) # 小画布

axes1.plot(x, y1, color='r', linestyle='--', linewidth=2, alpha=0.7) # 大画布

axes2.plot(x, y2, color='g', linewidth=2) # 小画布

可以看到,我们的图形被放在了不同大小的画布上。

那如何控制我们的画布大小及位置呢?

大家可以看下图中add_axes的参数设置:

除此之外也可以看到,add_axes的主要功能,就是向我们设置的画板figure中添加画布。

当然,还有一种更常见的添加画布的方法,就是——subplots( )。

比如,在subplots(2,2,1 )中,

第一、二个参数代表共创建了2*2个画布,其中subplots(2,2,1 )表示第一个画布。

我们来看看下面这个例子:(注意看subplots的设置哦~)

x= np.linspace(-2 * np.pi, 2 * np.pi, 1000)

y1 = np.sin(x)

y2 = np.cos(x)

plt.subplot(2,1,1)

plt.plot(x, y1, color='r', linestyle='--', linewidth=2, alpha=0.7)

plt.subplot(2,1,2)

plt.plot(x, y2, color='g', linewidth=2)

5、如何添加图表题目、坐标轴标题、以及图例等图表基本内容。

我们直接从例子出发:

fig, axes = plt.subplots()

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

axes.set_xlabel('X轴') # 横坐标标题

axes.set_ylabel('Y轴') #纵坐标标题

axes.set_title('三角函数') # 图表标题

x= np.linspace(-2 * np.pi, 2 * np.pi, 1000)

y1 = np.sin(x)

y2 = np.cos(x)

axes.plot(x, y1, color='r', linestyle='--', linewidth=2, alpha=0.7)

axes.plot(x, y2, color='g', linewidth=2)

axes.legend(["sin", "cos"], loc=0) # 图例

set_xlabel:横坐标标题

set_ylabel:纵坐标标题

set_title: 图表标题

loc:标记图例位置,1,2,3,4依次代表:右上角、左上角、左下角,右下角;0代表自适应。

效果图:

注意~

在这里我多添加了一条代码:

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

这是因为我们输出的图例等包含中文,需要对格式进行设置。

然后,也有另一种方式,下面是我以前做的另一个图:

import matplotlib

from matplotlib import pyplot as plt

myfont = matplotlib.font_manager.FontProperties(fname='C:\Windows\Fonts\simsun.ttc')

y_beijing=[8180.900,7659.100,8130.400,7199.500,7818.500,7638.200,7969.500,8225.400,8266.400,8444.600,8103.500,8119.700]

x=range(1,13)

plt.figure(figsize=(8,6),dpi=80,num=4)

plt.plot(x,y_beijing,label='旅客人数月变化',color='yellow')

xtick_labels=['{}月'.format(i) for i in x]

plt.xticks(x,xtick_labels,FontProperties=myfont)

plt.yticks( range(7000,8500,500))

plt.title('北京机场吞吐量',FontProperties=myfont,fontsize=15)

plt.xlabel('月份',FontProperties=myfont,fontsize=15)

plt.ylabel('旅客人数/千人',FontProperties=myfont,fontsize=15)

plt.grid(alpha=0.3)

for x, y in zip(x, y_beijing):

plt.text(x, y+0.4, '%.0f'%y, ha='center', va='bottom', fontsize=10)

plt.legend(prop=myfont)

plt.show()

可以看到,代码有一点点不同,但是仍然达到同样的效果。

其中,myfont=matplotlib.font_manager.FontProperties(fname='C:\Windows\Fonts\simsun.ttc')这条代码也是由于中文输入的原因。

6、如何规范我们画图的习惯

1、通过plt.figure()或者plt.subplots()管理一个完整的图形对象。

2、在图形对象的基础上,再添加图表题目、坐标轴标题、以及图例等图表基本内容。

以上便是的内容,感谢大家的细心阅读,同时欢迎感兴趣的小伙伴一起讨论、学习,想要了解更多内容的可以看我的其他文章,同时可以持续关注我的动态~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值