python的matplotlib包支持我们画图,有点非常多,现学习如下。
首先要导入包,在以后的示例中默认已经导入这两个包
1
2
|
import matplotlib.pyplot as plt import numpy as np |
然后画一个最基本的图
1
2
3
4
5
6
7
8
9
10
|
t = np.arange( 0.0 , 2.0 , 0.01 ) #x轴上的点,0到2之间以0.01为间隔 s = np.sin( 2 * np.pi * t) #y轴为正弦 plt.plot(t, s) #画图 plt.xlabel( 'time (s)' ) #x轴标签 plt.ylabel( 'voltage (mV)' ) #y轴标签 plt.title( 'About as simple as it gets, folks' ) #图的标签 plt.grid( True ) #产生网格 plt.savefig( "test.png" ) #保存图像 plt.show() #显示图像 |
这是在一个窗口中画单张图的过程,那么如何画多张图呢?画图的过程相同,无非是画多张,然后设定位置。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
x1 = np.linspace( 0.0 , 5.0 ) #画图一 x2 = np.linspace( 0.0 , 2.0 ) #画图二 y1 = np.cos( 2 * np.pi * x1) * np.exp( - x1) y2 = np.cos( 2 * np.pi * x2) plt.subplot( 2 , 1 , 1 ) #面板设置成2行1列,并取第一个(顺时针编号) plt.plot(x1, y1, 'yo-' ) #画图,染色 plt.title( 'A tale of 2 subplots' ) plt.ylabel( 'Damped oscillation' ) plt.subplot( 2 , 1 , 2 ) #面板设置成2行1列,并取第二个(顺时针编号) plt.plot(x2, y2, 'r.-' ) #画图,染色 plt.xlabel( 'time (s)' ) plt.ylabel( 'Undamped' ) plt.show() |
两张图的示例如下
直方图的画法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
# -*- coding:utf-8 -*- import numpy as np import matplotlib.mlab as mlab import matplotlib.pyplot as plt mu = 100 # 正态分布的均值 sigma = 15 # 标准差 x = mu + sigma * np.random.randn( 10000 ) #在均值周围产生符合正态分布的x值 num_bins = 50 n, bins, patches = plt.hist(x, num_bins, normed = 1 , facecolor = 'green' , alpha = 0.5 ) #直方图函数,x为x轴的值,normed=1表示为概率密度,即和为一,绿色方块,色深参数0.5.返回n个概率,直方块左边线的x值,及各个方块对象 y = mlab.normpdf(bins, mu, sigma) #画一条逼近的曲线 plt.plot(bins, y, 'r--' ) plt.xlabel( 'Smarts' ) plt.ylabel( 'Probability' ) plt.title(r 'Histogram of IQ: $\mu=100$, $\sigma=15$' ) #中文标题 u'xxx' plt.subplots_adjust(left = 0.15 ) #左边距 plt.show() |
直方图如下
3D图像的画法
3D离散点
1
2
3
4
5
6
7
8
9
10
11
12
13
|
#!/usr/bin/env python # encoding: utf-8 import matplotlib.pyplot as plt import numpy as np from mpl_toolkits.mplot3d import Axes3D x_list = [[ 3 , 3 , 2 ],[ 4 , 3 , 1 ],[ 1 , 2 , 3 ],[ 1 , 1 , 2 ],[ 2 , 1 , 2 ]] fig = plt.figure() ax = fig.gca(projection = '3d' ) for x in x_list: ax.scatter(x[ 0 ],x[ 1 ],x[ 2 ],c = 'r' ) plt.show() |
画空间平面
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
from mpl_toolkits.mplot3d.axes3d import Axes3D from matplotlib import cm import matplotlib.pyplot as plt import numpy as np fig = plt.figure() ax = fig.add_subplot( 1 , 1 , 1 , projection = '3d' ) X = np.arange( 1 , 10 , 1 ) Y = np.arange( 1 , 10 , 1 ) X, Y = np.meshgrid(X, Y) Z = 3 * X + 2 * Y + 30 surf = ax.plot_surface(X, Y, Z, rstride = 1 , cstride = 1 ,cmap = cm.jet,linewidth = 0 , antialiased = True ) ax.set_zlim3d( 0 , 100 ) fig.colorbar(surf, shrink = 0.5 , aspect = 5 ) plt.show() |
画空间曲面
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
from mpl_toolkits.mplot3d import Axes3D from matplotlib import cm from matplotlib.ticker import LinearLocator, FormatStrFormatter import matplotlib.pyplot as plt import numpy as np fig = plt.figure() ax = fig.gca(projection = '3d' ) X = np.arange( - 5 , 5 , 0.1 ) Y = np.arange( - 5 , 5 , 0.1 ) 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, linewidth = 0 , antialiased = False ) #画表面,x,y,z坐标, 横向步长,纵向步长,颜色,线宽,是否渐变 ax.set_zlim( - 1.01 , 1.01 ) #坐标系的下边界和上边界 ax.zaxis.set_major_locator(LinearLocator( 10 )) #设置Z轴标度 ax.zaxis.set_major_formatter(FormatStrFormatter( '%.02f' )) #Z轴精度 fig.colorbar(surf, shrink = 0.5 , aspect = 5 ) #shrink颜色条伸缩比例(0-1),aspect颜色条宽度(反比例,数值越大宽度越窄) plt.show() |
3D图分别如下
饼状图画法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
# -*- coding: utf-8 -*- import matplotlib.pyplot as plt labels = 'Frogs' , 'Hogs' , 'Dogs' , 'Logs' #设置标签 sizes = [ 15 , 30 , 45 , 10 ] #占比,和为100 colors = [ 'yellowgreen' , 'gold' , 'lightskyblue' , 'lightcoral' ] #颜色 explode = ( 0 , 0.1 , 0 , 0 ) #展开第二个扇形,即Hogs,间距为0.1 plt.pie(sizes, explode = explode, labels = labels, colors = colors,autopct = '%1.1f%%' , shadow = True , startangle = 90 ) #startangle控制饼状图的旋转方向 plt.axis( 'equal' ) #保证饼状图是正圆,否则会有一点角度偏斜 fig = plt.figure() ax = fig.gca() import numpy as np ax.pie(np.random.random( 4 ), explode = explode, labels = labels, colors = colors,autopct = '%1.1f%%' , shadow = True , startangle = 90 , radius = 0.25 , center = ( 0 , 0 ), frame = True ) ax.pie(np.random.random( 4 ), explode = explode, labels = labels, colors = colors, autopct = '%1.1f%%' , shadow = True , startangle = 90 , radius = 0.25 , center = ( 1 , 1 ), frame = True ) ax.pie(np.random.random( 4 ), explode = explode, labels = labels, colors = colors, autopct = '%1.1f%%' , shadow = True , startangle = 90 , radius = 0.25 , center = ( 0 , 1 ), frame = True ) ax.pie(np.random.random( 4 ), explode = explode, labels = labels, colors = colors, autopct = '%1.1f%%' , shadow = True , startangle = 90 ,radius = 0.25 , center = ( 1 , 0 ), frame = True ) ax.set_xticks([ 0 , 1 ]) #设置位置 ax.set_yticks([ 0 , 1 ]) ax.set_xticklabels([ "Sunny" , "Cloudy" ]) #设置标签 ax.set_yticklabels([ "Dry" , "Rainy" ]) ax.set_xlim(( - 0.5 , 1.5 )) ax.set_ylim(( - 0.5 , 1.5 )) ax.set_aspect( 'equal' ) plt.show() |
饼状图如下:
平时用到的也就这几种,掌握这几种就差不多了,更多内容见
https://matplotlib.org/users/screenshots.html
总结
以上就是本文关于python matplotlib画图实例代码分享的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!
原文链接:http://blog.csdn.net/ali197294332/article/details/51694141