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

使用Python进行数学图表绘制

2016-10-31 17:34 621 查看
学习目标:

使用Python进行数学图表绘制
使用模块:

matplotlib:

Python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地行制图。而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中。

安装:

pip install matplotlib

概念:



两段小代码:

代码1:

import matplotlib.pyplot as plt

for i,g in enumerate("rgbyck"):

plt.subplot(321+i,axisbg=g)

plt.show()

结果



代码2:

plt.plot([1,1.5,2,3])

plt.ylabel('some number')

plt.show()

结果



matplotlib实际上是一套面向对象的绘图库,它所绘制的图表中的每个绘图元素,例如线条Line2D、文字Text、刻度等在内存中都有一个对象与之对应。

为了方便快速绘图matplotlib通过pyplot模块提供了一套和MATLAB类似的绘图API,将众多绘图对象所构成的复杂结构隐藏在这套API内部。我们只需要调用pyplot模块所提供的函数就可以实现快速绘图以及设置图表的各种细节。pyplot模块虽然用法简单,但不适合在较大的应用程序中使用。

为了将面向对象的绘图库包装成只使用函数的调用接口,pyplot模块的内部保存了当前图表以及当前子图等信息。当前的图表和子图可以使用plt.gcf()和plt.gca()获得,分别表示"Get Current Figure"和"Get Current Axes"。在pyplot模块中,许多函数都是对当前的Figure或Axes对象进行处理

figure:图形 axes:坐标轴

在这里我们必须强调几个numpy中我们常用方法

首先numpy是我们Python当中一个强大的数学方法库,它给我们做数学运算提供了很好的支持

1、numpy.arange()

三个参数

第一个参数是起始位置

第二个参数是结束位置

第三个参数是步长,默认为1

2、numpy.linspace()

三个参数

第一个是起始位置

第二个是结束位置

第三个是元素的个数,默认为50

3、numpy.sin()、cos()、log()

这些大家应该有影响但是注意的是他们可以处理一个也可以批量处理

1、开始2D图的绘制

1、设置坐标区间

example 1

import numpy as np

import matplotlib.pyplot as plt

x = np.arange(-5,5,0.01)

y = x**3

#plt.axit([-6,6,-10,10])

plt.xticks(range(-6,6)) #x轴区间设置

plt.yticks(range(-150,150,10)) #y轴区间设置

plt.plot(x,y)

plt.show()

example 2

import numpy as np

import matplotlib.pyplot as plt

x = range(5)

y = [10,18,24,16,28]

plt.xticks(range(0,6),["A","B","C","D","E",]) #设置刻度

plt.yticks(range(10,30))

plt.plot(x,y)

plt.show()

example 3

import numpy as np

import matplotlib.pyplot as plt

from pylab import *

x = np.arange(-5.0, 5.0, 0.02)

y1 = np.sin(x)

plt.figure(1)

plt.subplot(211)

plt.plot(x, y1)

plt.subplot(212)

xlim(-2.5, 2.5)#设置x轴范围

ylim(-1, 1)#设置y轴范围

plt.plot(x, y1)

plt.show()

2、设置网格线

example

x = range(5)

y = [10,18,24,16,28]

plt.xticks(range(0,6),["A","B","C","D","E",])

plt.yticks(range(10,30))

plt.plot(x,y)

plt.grid(True) #当grid为True的时候就是开启网格线

plt.show()

3、设置多条线

example

import numpy as np

import matplotlib.pyplot as plt

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

plt.plot(t, t, 'r--', t, t**2, 'bs', t, t**3, 'g^')#X,Y,样式

plt.show()

4、子图问题

plt.figure()

example

import matplotlib.pyplot as plt

plt.figure(1) # 第一张图

plt.subplot(311) # 第一张图中的第一张子图

plt.plot([1,2,3])

plt.subplot(312) # 第一张图中的第二张子图

plt.plot([4,5,6])

plt.subplot(313) # 第一张图中的第三张子图

plt.plot([7,8,9])

plt.figure(2) # 第二张图

plt.plot([4,5,6]) # 默认创建子图subplot(111)

plt.figure(1) # 切换到figure 1 ; 子图subplot(212)仍旧是当前图

plt.subplot(311) # 令子图subplot(211)成为figure1的当前图

plt.title('Easy as 1,2,3') # 添加subplot 211 的标题

plt.show()

5、直方图

example 1

import numpy as np

import matplotlib.pyplot as plt

mu, sigma = 100, 15

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

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

plt.show()

example 2

import numpy as np

import matplotlib.pyplot as plt

data = np.random.randint(1, 11, 5)

x = np.arange(len(data))

plt.plot(x, data, color = 'r')

plt.bar(x, data, alpha = .1, color = 'g')

plt.show()

6、标题

example

import numpy as np

import matplotlib.pyplot as plt

mu, sigma = 100, 15

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

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

plt.title('Histogram of IQ') #添加标题

plt.show()

7、注释

example

import numpy as np

import matplotlib.pyplot as plt

mu, sigma = 100, 15

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

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

plt.xlabel('Smarts') #设置x轴标签

plt.ylabel('Probability') #设置y轴标签

plt.title('Histogram of IQ') #添加标题

#添加文字

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

plt.grid(True)

plt.show()

9、设置汉语

example

import numpy
as npimport
matplotlib.pyplot as pltimport
matplotlib as mplmpl.rcParams['font.family']
= 'sans-serif'mpl.rcParams['font.sans-serif']
= [u'SimHei']

10、饼状图

example

import numpy as np

import matplotlib.pyplot as plt

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

x = np.arange(len(data))

plt.pie(data, explode = [0,0,.1, 0, 0,0])#很有趣

plt.show()

help(plt.pie)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: