加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

Python学习笔记(5)--matplotlib数据可视化

(2018-08-08 18:15:10)
标签:

python

分类: Python学习笔记

MatplotlibPython最著名的数据可视化工具包,有了它,一些统计上常用的图形如折线图、散点图、直方图等都可以用简单的几行Python代码实现。

PyplotMatplotlib里用的最多的工具,他有2个最常用的场景,一个是画点,一个是画线。

#导入pyplot包,并简写为plt

import matplotlib.pyplot as plt

matplotlib.pyplot 包含一系列类似 MATLAB 中绘图函数的相关函数。每个 matplotlib.pyplot 中的函数对当前的图像进行一些修改,例如:产生新的图像,在图像中产生新的绘图区域,在绘图区域中画线,给绘图加上标记,等等…… matplotlib.pyplot 会自动记住当前的图像和绘图区域,因此这些函数会直接作用在当前的图像上。

1.plt.show() 函数:

默认情况下,matplotlib.pyplot 不会直接显示图像,只有调用 plt.show() 函数时,图像才会显示出来。

plt.show() 默认是在新窗口打开一幅图像,并且提供了对图像进行操作的按钮

2.plt.plot() 函数

默认参数:plt.plot(x,y)

指定参数:plt.plot(x,y, format_str)

默认参数:x  0~N-1   plt.plot(y)

指定参数:x  0~N-1   plt.plot(y, format_str)

字符参数

表示颜色的字符参数有:

字符

颜色

b

蓝色,blue

g

绿色,green

r

红色,red

c

青色,cyan

m

品红,magenta

y

黄色,yellow

k

黑色,black

w

白色,white

表示类型的字符参数有:

字符

类型

字符

类型

'-'

实线

'--'

虚线

'-.'

虚点线

':'

点线

'.'

','

像素点

'o'

圆点

'v'

下三角点

'^'

上三角点

'<'

左三角点

'>'

右三角点

'1'

下三叉点

'2'

上三叉点

'3'

左三叉点

'4'

右三叉点

's'

正方点

'p'

五角点

'*'

星形点

'h'

六边形点1

'H'

六边形点2

'+'

加号点

'x'

乘号点

'D'

实心菱形点

'd'

瘦菱形点

'_'

横线点

 

 

例如我们要画出红色圆点:

plt.plot([1,2,3,4], [1,4,9,16], 'ro')

plt.show()

显示范围

这里可以使用 axis 函数指定坐标轴显示的范围:

plt.axis([xmin, xmax, ymin, ymax])

# 指定 x 轴显示区域为 0-6y 轴为 0-20

plt.axis([0,6,0,20])

plt.show()

传入 Numpy 数组

 plot 中传入 numpy 数组是更常用的做法。事实上,如果传入的是列表,matplotlib 会在内部将它转化成数组再进行处理:

import numpy as np

import matplotlib.pyplot as plt

# evenly sampled time at 200ms intervals

t = np.arange(0., 5., 0.2)

# red dashes, blue squares and green triangles

plt.plot(t, t, 'r--',

         t, t**2, 'bs',

         t, t**3, 'g^')

plt.show()

传入多组数据

事实上,在上面的例子中,我们不仅仅向 plot 函数传入了数组,还传入了多组 (x,y,format_str) 参数,它们在同一张图上显示。这意味着我们不需要使用多个 plot 函数来画多组数组,只需要可以将这些组合放到一个 plot 函数中去即可

线条属性

之前提到,我们可以用字符串来控制线条的属性,事实上还可以通过关键词来改变线条的性质,例如 linwidth 可以改变线条的宽度,color 可以改变线条的颜色:

x = np.linspace(-np.pi,np.pi)

y = np.sin(x)

plt.plot(x, y, linewidth=2.0, color='r')

plt.show()

plt.setp() 修改线条性质

lines = plt.plot(x, y)

# 使用键值对

plt.setp(lines, color='r', linewidth=2.0)

# 或者使用 MATLAB 风格的字符串对

plt.setp(lines, 'color', 'r', 'linewidth', 2.0)

plt.show()

可以设置的属性有很多,可以使用 plt.setp(lines) 查看 lines 可以设置的属性,各属性的含义可参考 matplotlib 的文档

3. 子图

figure() 函数会产生一个指定编号为 num 的图:

plt.figure(num)

使用 subplot 可以在一副图中生成多个子图,其参数为:

plt.subplot(numrows, numcols, fignum)

 numrows * numcols < 10 时,中间的逗号可以省略,因此 plt.subplot(211) 就相当于 plt.subplot(2,1,1)

#将绘画框进行对象化

fig=plt.figure()

#p1定义为绘画框的子图,211表示将绘画框划分为21列,最后的1表示第一幅图

p1=fig.add_subplot(211)

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

y=[2,1,3,5,2,6,12,7]

p1.plot(x,y)

#p2定义为绘画框的子图,211表示将绘画框划分为21列,最后的2表示第二幅图

p2=fig.add_subplot(212)

a=[1,2]

b=[2,4]

p2.scatter(a,b)

plt.show()

4.图形上加上文字

plt.hist() 可以用来画直方图

mu, sigma = 100, 15

x = mu + sigma * np.random.randn(10000)

# the histogram of the data

n, bins, patches = plt.hist(x, 50, density=1, facecolor='g', alpha=0.75)

plt.xlabel('Smarts')

plt.ylabel('Probability')

plt.title('Histogram of IQ')

plt.text(60, .025, r'$\mu=100,\ \sigma=15$')

plt.axis([40, 160, 0, 0.03])

plt.grid(True)

plt.show()

 

对于这幅图形,我们使用 xlabel ylabeltitletext 方法设置了文字,其中:

xlabel x 轴标注

ylabel y 轴标注

title :图形标题

text :在指定位置放入文字

输入特殊符号支持使用 Tex 语法,用 $$ 隔开

除了使用 text 在指定位置标上文字之外,还可以使用 annotate 函数进行注释,annotate 主要有两个参数:

·         xy :注释位置

·         xytext :注释文字位置

ax = plt.subplot(111)

t = np.arange(0.0, 5.0, 0.01)

s = np.cos(2*np.pi*t)

line, = plt.plot(t, s, lw=2)

plt.annotate('local max', xy=(2, 1), xytext=(3, 1.5),

            arrowprops=dict(facecolor='black', shrink=0.05),

            )

plt.ylim(-2,2)

plt.show()

 

5.使用 style 来配置 pyplot 风格

style  pyplot 的一个子模块,方便进行风格转换, pyplot 有很多的预设风格,可以使用 plt.style.available 来查看:

可以模仿 R 语言中常用的 ggplot 风格

x = np.linspace(0, 2 * np.pi)

y = np.sin(x)

plt.style.use('ggplot')

plt.plot(x, y)

plt.show()

我们不希望改变全局的风格,只是想暂时改变一下分隔,则可以使用 context 将风格改变限制在某一个代码块内

with plt.style.context(('dark_background')):

plt.plot(x, y, 'r-o')

plt.show()

 

6. 基础文本函数

 matplotlib.pyplot 中,基础的文本函数如下:

·         text()  Axes 对象的任意位置添加文本

·         xlabel() 添加 x 轴标题

·         ylabel() 添加 y 轴标题

·         title()  Axes 对象添加标题

·         figtext()  Figure 对象的任意位置添加文本

·         suptitle()  Figure 对象添加标题

·         anotate()  Axes 对象添加注释(可选择是否添加箭头标记)

在字符串中使用一对 $$ 符号可以利用 Tex 语法打出数学表达式,而且并不需要预先安装 Tex。在使用时我们通常加上 标记表示它是一个原始字符串(raw string

# math text

plt.title(r'$\alpha > \beta$')

plt.show()

使用  表示上下标:r'$\alpha_i > \beta_i$'

分数:r'$\frac{3}{4}

二项式系数:\binom{3}{4}

Tex 语言中,括号始终是默认的大小,如果要使括号大小与括号内部的大小对应,可以使用 \left  \right 选项:

r'$\left(\frac{5 - \frac{1}{x}}{4}\right)$'

根号:r'$\sqrt[3]{x}$'

 

7.注释

使用文本框进行注释

text() 函数接受 bbox 参数来绘制文本框。

bbox_props = dict(boxstyle="rarrow,pad=0.3", fc="cyan", ec="b", lw=2)

t = ax.text(0, 0, "Direction", ha="center", va="center", rotation=45,

            size=15,

            bbox=bbox_props)

可以这样来获取这个文本框,并对其参数进行修改:

bb = t.get_bbox_patch()

bb.set_boxstyle("rarrow", pad=0.6)

 

8. 标签

legend() 函数被用来添加图像的标签,其主要相关的属性有

legend entry - 一个 legend 包含一个或多个 entry,一个 entry 对应一个 key 和一个 label

legend key - marker 的标记

legend label - key 的说明

legend handle - 一个 entry 在图上对应的对象

调用 legend() 会自动获取当前的 Axes 对象,并且得到这些 handles labels,相当于:

handles, labels = ax.get_legend_handles_labels()

ax.legend(handles, labels)

 

9.3D效果

matplotlib可以实现酷炫吊炸天的3D效果,绝对是PPT上的装逼利器。比如简单的可以画一个3D的三角形

#导入pyplot包,并简写为plt

import matplotlib.pyplot as plt

#导入3D

from mpl_toolkits.mplot3d import Axes3D

#将绘画框进行对象化

fig = plt.figure()

#将绘画框划分为1个子图,并指定为3D

ax = fig.add_subplot(111, projection='3d')

#定义X,Y,Z三个坐标轴的数据集

X = [1, 1, 2, 2]

Y = [3, 4, 4, 3]

Z = [1, 100, 1, 1]

#用函数填满4个点组成的三角形空间

ax.plot_trisurf(X, Y, Z)

plt.show()

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有