Matplotlib 数据可视化

发布时间:2018-12-18  栏目:Python  评论:0 Comments

Matplotlib

Matplotlib 是一个坏强的 Python 画图工具; 手中有不少数额,
Matplotlib能帮你作画生美之:

  • 线图;
  • 散点图;
  • 等高线图;
  • 条形图;
  • 柱状图;
  • 3D 图形,
  • 居然是图表动画等等.

事先断断续续的圈了诸多有关 Matplotlib
的科目,也举办了部分练兵,但时常让不同演示着烂且不同的一声令下所惑。前几天恰恰看到了
克里斯(Rhys)(Chris) Moffitt 的立刻首作品 Effective
Matplotlib
,觉得出必不可少整合官网从再强的见掌握Matplotlib 的行事机制,在这更新是笔记。

Linux 

打开 Terminal 窗口, 输入以下内容

# python 3+ 请复制以下在 terminal 中执行
$ sudo apt-get install python3-matplotlib

# python 2+ 请复制以下在 terminal 中执行
$ sudo apt-get install python-matplotlib

首先,在 Matplotlib 中 figure 做了 canvas 和 axes
构成了我们看来的终极的图像本身,其中一个 figure 中得以分包一个仍然多单
axes,而各种一个 axes 则是均等序列 artists 如坐标轴 axis,标签 label,标题
title,图例 legend 的集纳。在先后中 figure 常用 fig 变量来代替,而 axes
常用 ax 变量来代替,鉴于各类对象中的层级结构关系,在利用中获取了 fig 和
ax 的控制权就可针对中的因素举办修改。

MacOS 

开辟 Terminal 窗口, 输入以下内容

# python 3+ 请复制以下在 terminal 中执行
$ pip3 install matplotlib

# python 2+ 请复制以下在 terminal 中执行
$ pip install matplotlib

图片 1

Windows 

Windows 的装最为麻烦. 我们一步步来:

图片 2

    matplotlib-1.5.3-cp35-cp35m-win32.whl (md5)
    1.5.3 : plt版本
    cp35  : python 版本
    win32 : Windows 32位系统
    whl   : wheel 文件 
  • 故此 CMD 找到那个 .whl 文件目录, 然后 pip 安装.
    以 matplotlib-1.4.3-cp35-none-win32.whl文件呢条例:

    $ cd python_work # 用 cd 去到公下载的文件目录

    # 假假如 python 3+ 版本, 像下边一样
    python_work$ python -m pip3 install matplotlib-1.4.3-cp35-none-win32.whl

  • 若果设置不成事, 还爆发同种办法可便捷安装有对运算模块.
    可以搜寻一下 Anaconda python

Tree diagram of different artists in matplotlib

基础运用

使用import导入模块matplotlib.pyplot,并简写成plt 使用import导入模块numpy,并简写成np

import matplotlib.pyplot as plt
import numpy as np

使用np.linspace定义x:范围是(-1,1);个数是50.
虚一维数据组(x ,y)表示曲线1.

x = np.linspace(-1, 1, 50)
y = 2*x + 1

使用plt.figure概念一个图像窗口. 使用plt.plot画(x ,y)曲线.
使用plt.show来得图像.

plt.figure()
plt.plot(x, y)
plt.show()

图片 3

 

其余,还是可以够绘制很多见仁见智的绘画,就如下几乎只例证:

曲线图

图片 4

 

>>> import matplotlib.pyplot as plt
>>> import numpy as np
>>> a = np.linspace(0,10,100)
>>> b = np.exp(-a)
>>> plt.plot(a,b)
>>> plt.show()

直方图

图片 5

 

>>> import matplotlib.pyplot as plt
>>> from numpy.random import normal,rand
>>> x = normal(size=200)
>>> plt.hist(x,bins=30)
>>> plt.show()

散点图

图片 6

 

>>> import matplotlib.pyplot as plt
>>> from numpy.random import rand
>>> a = rand(100)
>>> b = rand(100)
>>> plt.scatter(a,b)
>>> plt.show()

3D 图

图片 7

 

>>> from matplotlib import cm
>>> from mpl_toolkits.mplot3d import Axes3D
>>> import matplotlib.pyplot as plt
>>> import numpy as np
>>> fig = plt.figure()
>>> ax = fig.gca(projection='3d')
>>> X = np.arange(-5, 5, 0.25)
>>> Y = np.arange(-5, 5, 0.25)
>>> X, Y = np.meshgrid(X, Y)
>>> R = np.sqrt(X**2 + Y**2)
>>> Z = np.sin(R)
>>> surf = ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.coolwarm)
>>> plt.show()

再次多例

  • 图片 8

    Image plot

  • 图片 9

    Contour plot

  • 图片 10

    Scatter plot

  • 图片 11

    Polar plot

  • 图片 12

    Line plot

  • 图片 13

    3-D plot

  • 图片 14

    Image plot

 

下,Matplotlib 的首选输入是列表和 Numpy
中之高频组,任何此外类型的输入包括 Pandas 的数据类型,如 np.matrix
等都应当转化成组,否则 Matplotlib
会内部自行转接,但由换的花样免必然是我们想要是的,由此最后生成的图像可能未是意料的体。

预定引用情势:

import matplotlib.pyplot as plt
%matplotlib inline
%config InlineBackend.figure_format = 'retina'
# this very last line ask the backend to generate higher resolution figures

利用实例

折线图

plt.plot()
的输入为需要可视的左右、纵为标值,并可以指定线型,宽度,颜色非常:

input_values = [1, 2, 3, 4, 5]
squares = [1, 4, 9, 16, 25]
plt.plot(input_values, squares, linewidth=3)

图片的题,横纵坐标的竹签和还得分别通过 plt.title(),
plt.xlabel(), plt.ylabel() 指定:

plt.title("Square Numbers", fontsize=20)
plt.xlabel("Value", fontsize=14)
plt.ylabel("Square of Value", fontsize=14)
plt.tick_params(axis='both', labelsize=14)
plt.show()

图片 15

square numbers plot

plt.plot() 第一赖下时汇合自动成立相应的 figure 和 axes
来好图表的绘图,后续添加的 plt.plot() 命令会在前的 axes
上连续多新的 artists 内容:

# code adopted from matplotlib website
x = np.linspace(0, 2, 100)

plt.plot(x, x, label='linear')
plt.plot(x, x**2, label='quadratic')
plt.plot(x, x**3, label='cubic')
# plt.axis() takes a list of [xmin, xmax, ymin, ymax]
plt.axis([1, 2, 1, 8])

plt.xlabel('x label')
plt.ylabel('y label')

plt.title("Simple Plot")

plt.legend()

plt.show()

图片 16

multiple plot( ) calls

以一个 figure 上绘制三只 axes 需要用 plt.subplot() 命令:

def f(t):
    return np.exp(-t) * np.cos(2*np.pi*t)

t1 = np.arange(0.0, 5.0, 0.1)
t2 = np.arange(0.0, 5.0, 0.02)

# subplot() command specifies numrows, numcols, fignum
# where fignum ranges from 1 to numrows*numcols
plt.subplot(211) # the same as plt.subplot(2, 1, 1)
plt.plot(t1, f(t1), 'bo', t2, f(t2), 'k')

plt.subplot(212)
plt.plot(t2, np.cos(2*np.pi*t2), 'r--')

plt.show()

图片 17

subplot with functions, from matplotlib

于一个 figure 中绘制六个 axes 时有少数单函数:plt.subplot()
plt.subplots(),后者再次回到 figure 和 一个要三个 axes
,此后对此图像中元素的操作都是依照 ax.method() 而无论是需下以
plt.method() 的款型,其采用形式吗:

# Get the figure and the axes
fig, (ax0, ax1) = plt.subplots(nrows=1, ncols=2, sharey=True, figsize=(10,4))

# Build the first plot
top_10.plot(kind='barh', x='Name', y='Sales', ax=ax0)
ax0.set(title='Revenue', xlabel='Total revenue', ylabel='Customers')
formatter = FuncFormatter(currency)
ax0.xaxis.set_major_formatter(formatter)

# Add average line to the first plot
revenue_average = top_10['Sales'].mean()
ax0.axvline(x=revenue_average, color='b', label='Average', linestyle='--', linewidth=1)

# Build the second plot
top_10.plot(kind='barh', x='Name', y='Purchases', ax=ax1)
ax1.set(title='Units', xlabel='Total units', ylabel='')

# Add average line to the second plot
purchases_average = top_10['Purchases'].mean()
ax1.axvline(x=purchases_average, color='b', label='Average', linestyle='--', linewidth=1)

# Title the figure
fig.suptitle('2014 Sales Analysis', fontsize=14, fontweight='bold')

# Hide the plot legends
ax0.legend().set_visible(False)
ax1.legend().set_visible(False)

图片 18

Image from pbpython

顾:下面就同样段落代码和图纸来自于Effective
Matplotlib
,版权属为
克莉丝 Moffitt 本人。

比方在绘制多独 axes 时想指定不同 axes 的职,则用显式的使
axes([left, bottom, width, height])
来指定地点,注意参数提供的凡周旋于坐标轴的百分比值,而无相对值:

dt = 0.001
t = np.arange(0.0, 10.0, dt)
r = np.exp(-t[:1000]/0.05) # impulse response
x = np.random.randn(len(t))
s = np.convolve(x, r)[:len(x)]*dt # colored noise

# the main axes is subplot(111) by default
plt.plot(t, s)
plt.axis([0, 1, 1.1*np.amin(s), 2*np.amax(s)])
plt.xlabel('time (s)')
plt.ylabel('current (nA)')
plt.title('Gaussian colored noise')

# this is an inset axes over the main axes
a = plt.axes([.65, .6, .2, .2], facecolor='y')
n, bins, patches = plt.hist(s, 400, normed=1)
plt.title('Probability')
plt.xticks([])
plt.yticks([])

# this is another inset axes over the main axes
a = plt.axes([0.2, 0.6, .2, .2], facecolor='y')
plt.plot(t[:len(r)], r)
plt.title('Impulse response')
plt.xlim(0, 0.2)
plt.xticks([])
plt.yticks([])

plt.show()

图片 19

Multiple axes with manually set axes location, from matplotlib

散点图

上述手动输入的 list
作为数据源仅仅是为好展现,在普通的行使中,更多之是冲已有的数据变化图形。在散点图备受得以经过参数
c 来指定颜色,其输入的价好是 str, (R, G, B),
也不过逐点改变的数值来展现渐变;s
指定单个圆点的尺寸;默认情形下以圆点的外周会发出一个黑色的边框,可以经edgecolor='none'来裁撤边框要通过其他价值来改变颜色。

x = list(range(1, 1001))
y = [e*e for e in x]

# 第一行颜色指定为红色,第二行颜色为(R, G, B)值
# 第三行通过引用 cmp( color map)关键词引入渐变
#plt.scatter(x, y, c='red', edgecolor='none', s=20) 
#plt.scatter(x, y, c=(0, 0, 0.8), edgecolor='none', s=5)
plt.scatter(x, y, c=y, cmap=plt.cm.Blues, edgecolor='none', s=5)

# Set chart title and label axes
plt.title("Square Numbers", fontsize=20)
plt.xlabel("Value", fontsize=14)
plt.ylabel("Square of Value", fontsize=14)

# Set size of tick labels
plt.tick_params(axis='both', which='major', labelsize=14)

# Set the range for each axis
plt.axis([0, 1100, 0, 1100000])
plt.show()

图片 20

gradient color

参照阅读

  1. Matplotlib website – The Matplotlib
    FAQ

  2. Matplotlib website – pyplot
    tutorial

  3. Chris Moffitt – Effective
    matplotlib

留下评论

网站地图xml地图