Python绘图--二维绘图
绘制数据图
基本绘图
plot(x,y,format_string,**kwargs)
x:x轴数据,列表或数组,可选
y:y轴数据,列表或数组
format_string:控制曲线的格式字符串,可选
**kwargs:第二组或更多,(x,y,format_string)
format_string:控制曲线的格式字符串,可选,由颜色字符、风格字符和标记字符组成。具体的设置见格式字符串设置
import matplotlib.pyplot as plt
import numpy as np
x = [1, 2, 3, 4, 5, 6, 7]
y = [1, 4, 9, 16, 25, 36, 49]
plt.plot(x, y)
[<matplotlib.lines.Line2D at 0x1a84b658>]
加上轴标签和标题
import matplotlib.pyplot as plt
import numpy as np
x = [1, 2, 3, 4, 5, 6, 7]
y = [1, 4, 9, 16, 25, 36, 49]
plt.title(r'$y=x^2$')
#r'$公式$'可以使用latex语法写公式
plt.xlabel('x')
plt.ylabel('y')
plt.plot(x, y)
[<matplotlib.lines.Line2D at 0x1adec7f0>]
将曲线方程加到曲线旁边
import matplotlib.pyplot as plt
import numpy as np
x = [1, 2, 3, 4, 5, 6, 7]
y = [1, 4, 9, 16, 25, 36, 49]
plt.text(4, 25, r'$y=x^2$')
plt.xlabel('x')
plt.ylabel('y')
plt.plot(x, y)
[<matplotlib.lines.Line2D at 0x1b5ce718>]
设置曲线颜色、粗细及样式
from pylab import *
x = [1, 2, 3, 4, 5, 6, 7]
y = [1, 4, 9, 16, 25, 36, 49]
plot(x, y, 'g-1')
[<matplotlib.lines.Line2D at 0x21fd0058>]
在一幅图上画两个函数图像
import matplotlib.pyplot as plt
import numpy as np
x = [1, 2, 3, 4, 5, 6, 7]
y = [1, 4, 9, 16, 25, 36, 49]
z = np.linspace(0, 2*np.pi, 256)
plt.plot(x, y)
plt.plot(z, z**3)
[<matplotlib.lines.Line2D at 0x1b6f9d30>]
设计标签
比如你画一个三角函数,想设计x轴上的标签是以为单位的
from pylab import *
x = np.linspace(0, 2*np.pi, 256)
plot(x, np.sin(x))
xticks([0, np.pi/2, np.pi, np.pi*1.5, 2*np.pi],
[r'0', r'$\frac{\pi}{2}$', r'\pi', r'$\frac{3\pi}{2}$', r'$2\pi$'])
yticks([-1, 0, 1], ['-1', '0', '1'])
show()
添加图例
from pylab import *
x = [1, 2, 3, 4, 5, 6, 7]
y = [1, 4, 9, 16, 25, 36, 49]
z = np.linspace(0, 2*np.pi, 256)
plot(x, y, label=r"$y=x^2$")
plot(z, z**3, label=r"$y=x^3$")
legend()
<matplotlib.legend.Legend at 0x20dfcd60>
进阶绘图知识
绘制子图
:在的矩阵的第c个模块(行数优先从左往右)绘制图像
from pylab import *
x = np.linspace(0, 10, 100)
subplot(1, 2, 1)
plot(x, x**2)
title(r'$y=x^2$')
subplot(1, 2, 2)
plot(x, x**3)
title(r'$y=x^3$')
Text(0.5, 1.0, '$y=x^3$')
在图中画小图
如axes(0.1,0.1,0.8,0.8)就表示里figure左边和底部都相距0.1个总长;宽和高是总长的0.8
from pylab import *
x = np.linspace(0, 10, 100)
axes1 = axes([0.1, 0.1, 0.8, 0.8])
axes1.plot(x, x**2)
axes1.text(4, 25, r'$y=x^2$')
axes2 = axes([0.2, 0.6, 0.25, 0.25])
axes2.plot(x, x**3)
axes2.text(4, 500, r'$y=x^3$')
Text(4, 500, '$y=x^3$')
符号函数图像的绘制(包括隐函数作图)
普通符号函数绘制
from sympy import *
x=symbols('x')
plot(x**2,(x,-1,1),title=r'y=$x^2$',xlabel='x',ylabel='y')
plot(2*x,x**2+1,(x,0,1))
#同时绘制两条曲线
<sympy.plotting.plot.Plot at 0x1bd41dd8>
隐函数绘制
from sympy import *
from sympy.parsing.sympy_parser import parse_expr
plot_implicit(parse_expr('x**2+y**2-1'))
<sympy.plotting.plot.Plot at 0x1e4444a8>
from sympy import symbols
from sympy.plotting import plot3d
from sympy.functions import exp
x, y = symbols('x y')
plot3d(x*exp(-x**2-y**2), (x, -3, 3), (y, -2, 2))
<sympy.plotting.plot.Plot at 0x4b9ba30>
各种图形的绘制函数
散点图
scatter(x,y,s=20,c='b',maker='o',cmpa=None,norm=None,vmin=None,vax=None,alpha=None,linewidths=None,verts=None,hole=None)
x,y是相同长度的数组。
s可以是标量,或者与x,y长度相同的数组,表明散点的大小。默认20
c,即color,是点的颜色。颜色参数如下:b-blue c-cyan g-greeen k-black m-magenta r-red w-white y-yellow
marker 是散点的形状。其属性较多,'.'--点 'o'--圆圈 ','--像素 'v'--倒三角 '*'--星星
from pylab import *
x = np.random.normal(0, 1, 1024)
y = np.random.normal(0, 1, 1024)
scatter(x, y, marker=",")
<matplotlib.collections.PathCollection at 0x21f33238>
条形图
bar(left, height, width=0.8, bottom=None, color=None, edgecolor=None, linewidth=None, tick_label=None, xerr=None, yerr=None, label = None, ecolor=None, align, log=False, **kwargs)
x:传递数值序列,指定条形图中x轴上的刻度值
height:传递数值序列,指定条形图y轴上的高度
width:指定条形图的宽度,默认为0.8
bottom:用于绘制堆叠条形图
color:指定条形图的填充色
edgecolor:指定条形图的边框色
linewidth:指定条形图边框的宽度,如果指定为0,表示不绘制边框
tick_label:指定条形图的刻度标签
xerr:如果参数不为None,表示在条形图的基础上添加误差棒
yerr:参数含义同xerr
label:指定条形图的标签,一般用以添加图例
ecolor:指定条形图误差棒的颜色align:指定x轴刻度标签的对齐方式,默认为center,表示刻度标签居中对齐,如果设置为edge,则表示在每个条形的左下角呈现刻度标签
log:bool类型参数,是否对坐标轴进行log变换,默认为False
**kwargs:关键字参数,用于对条形图进行其他设置,如透明度等
from pylab import *
n = 12
X = np.arange(n)
Y1 = (1-X/float(n)) * np.random.uniform(0.5, 1.0, n)
Y2 = (1-X/float(n)) * np.random.uniform(0.5, 1.0, n)
bar(X, +Y1, facecolor='#9999ff', edgecolor='white')
bar(X, -Y2, facecolor='#ff9999', edgecolor='white')
for x, y in zip(X, Y1):
text(x, y+0.05, '%.2f' % y, ha='center', va='bottom')
for x, y in zip(X, Y2):
text(x, -y-0.15, '%.2f' % y, ha='center', va='bottom')
ylim(-1.25, +1.25)
xticks([])
yticks([])
([], <a list of 0 Text major ticklabel objects>)
饼状图
pie(x, explode=None, labels=None,
colors=('b', 'g', 'r', 'c', 'm', 'y', 'k', 'w'),
autopct=None, pctdistance=0.6, shadow=False,
labeldistance=1.1, startangle=None, radius=None,
counterclock=True, wedgeprops=None, textprops=None,
center = (0, 0), frame = False )
参数说明:
- x (每一块)的比例,如果sum(x) > 1会使用sum(x)归一化
- labels (每一块)饼图外侧显示的说明文字
- explode (每一块)离开中心距离
- startangle 起始绘制角度,默认图是从x轴正方向逆时针画起,如设定=90则从y轴正方向画起
- shadow 是否阴影
- labeldistance label绘制位置,相对于半径的比例, 如<1则绘制在饼图内侧
- autopct 控制饼图内百分比设置,可以使用format字符串或者format function
'%1.1f'指小数点前后位数(没有用空格补齐) - pctdistance 类似于labeldistance,指定autopct的位置刻度
- radius 控制饼图半径
返回值:
- 如果没有设置autopct,返回(patches, texts)
- 如果设置autopct,返回(patches, texts, autotexts)
patches -- list --matplotlib.patches.Wedge对象
texts autotexts -- matplotlib.text.Text对象
import numpy as np
import matplotlib.mlab as mlab
import matplotlib.pyplot as plt
labels = ['China', 'Swiss', 'USA', 'UK', 'Laos', 'Spain']
X = [222, 42, 455, 664, 454, 334]
fig = plt.figure()
plt.pie(X, labels=labels, autopct='%1.2f%%') # 画饼图(数据,数据对应的标签,百分数保留两位小数点)
plt.show()
matplotlib等高线画隐函数
- sympy虽然可以画隐函数,但不能实现两个函数图像在一张图中,而matplotlib的等高线却可以
import matplotlib.pyplot as plt
import numpy as np
#构造等高线函数
def f(x,y):
return f(x,y)
#定义点的数量
n=500
#作点
x=np.linspace(-3,3,500)
y=np.linspace(-3,3,500)
#构造网格
X,Y=np.meshgrid(x,y)
#绘制图像
plt.contour(X,Y,f(X,Y),0)
#作其他图像
plt.plot(x,y)
plt.show()
上述函数画出f(x,y)=0的隐函数图像
import matplotlib.pyplot as plt
import numpy as np
#构造等高线函数
def f(x,y):
return np.sin(x**2)+np.sin(y**2)-5
#定义点的数量
n=500
#作点
x=np.linspace(-3,3,500)
y=np.linspace(-3,3,500)
#构造网格
X,Y=np.meshgrid(x,y)
#绘制图像
plt.contour(X,Y,f(X,Y),0)
#作其他图像
plt.plot(x,y)
plt.show()