标签: Python 数据分析
matplotlib是最流行的用于绘制数据图表的Python库,非常适合创建出版物上用的图表
import matplotlib.pyplot as plt #导入模块
plt.figure():创建一幅图
plt.figure()
通过numpy创建数据:
import numpy as np
x=np.linspace(-np.pi,np.pi,256,endpoint=True) #四个个参数分别为起始值、结束值、点个数、是否包含结束值点(默认包含)
y=np.sin(x)
plt.plot():画出曲线,参数分别为横坐标,纵坐标,颜色,样式,线宽,透明度,曲线标签信息
plt.plot(x, y, color='green',linestyle='-',linewidth=2,alpha=0.5,label='$y=sin(x)$') #颜色为绿色,样式为实线,线宽为2,透明度0.5,标签信息为y=sin(x)此处引入了Latex公式
颜色参数
‘b’ | ‘g’ | ‘r’ | ‘c’ | ‘m’ | ‘y’ | ‘k’ | ‘w’ |
---|---|---|---|---|---|---|---|
blue | green | red | cyan | magenta | yellow | black | white |
样式参数(部分)
‘-‘ | ‘–’ | ‘-.’ | ‘.’ | ‘:’ | ‘,’ | ‘o’ | ‘v’ | ‘^’ | ‘>’ | ‘<’ | ‘*’ | ‘+’ | ‘x’ |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
实线 | 虚线 | 线点 | 点 | 点虚线 | 像素点 | 环 | 上三角 | 下三角 | 左三角 | 右三角 | 星型 | +型 | x型 |
plt.xlabel() :横纵坐标的标签设置
plt.xlabel('x轴标签信息') #为y轴加注释
plt.ylabel('y轴标签信息') #为y轴加注释
plt.axis():设置横纵坐标的范围
plt.axis([-5,5,-2,2]) #横坐标范围-5到5,纵坐标范围-2到2
plt.title():图像标题设置
plt.title("sin函数") #添加标题
plt.grid():是否显示网格
plt.grid(True) #表示显示网格
plt.legend():当plot中有定制了曲线标签信息时,用于显示图例
plt.legend(loc='upper left') #显示图例,显示位置为左上方
位置参数可以为:
‘best’ | ‘upper right’ | ‘upper left’ | ‘lower left’ | ‘lower right’ | ‘right’ | ‘center left’ | ‘center right’ | ‘lower center’ | ‘upper center’ | ‘center’ |
---|
plt.show():显示图像
plt.show() #显示所设置的图像
完整代码运行
import matplotlib.pyplot as plt #导入模块
import numpy as np
x=np.linspace(-np.pi,np.pi,256,endpoint=True) #四个个参数分别为起始值、结束值、点个数、是否包含结束值点(默认包含)
y=np.sin(x)
plt.figure()
plt.plot(x, y, color='green',linestyle='-',linewidth=2,alpha=0.5,label='$y=sin(x)$')
plt.xlabel('x轴标签信息') #为x轴加注释
plt.ylabel('y轴标签信息') #为y轴加注释
plt.axis([-5,5,-2,2]) #横坐标范围-5到5,纵坐标范围-2到2
plt.title("sin函数") #添加标题
plt.grid(True) #表示显示网格(True可省略)
plt.legend(loc='upper left') #显示图例,显示位置为左上方
plt.show() #显示所设置的图像
plt.gca():坐标轴的编辑
ax=plt.gca() #ax表示当前坐标轴
ax.spines['right'].set_color('none') #右侧边界线颜色设为空,表示隐藏
ax.spines['top'].set_color('none') #上侧边界线颜色设为空,表示隐藏
ax.spines['left'].set_position(('data',0)) #左侧边界线位置设为原点
ax.spines['bottom'].set_position(('data',0)) #下侧边界线位置设为原点
ax.xaxis.set_ticks_position('bottom') #设置横坐标标度显示在x轴下方
ax.yaxis.set_ticks_position('left') #设置纵坐标标度显示在y轴左侧
plt.xticks([-np.pi,-np.pi/2,0,np.pi/2,np.pi],['$-\pi$','$-\pi/2$','0','$\pi/2$','$\pi$']) #挨个指定横坐标标度显示格式:显示在$-\pi$,$-\pi/2$,'0','$\pi/2$','$\pi$'处的5个点(此处引用了Latex公式)
plt.yticks(np.linspace(-1,1,5,endpoint=True)) #指定纵坐标标度显示格式:显示在-1到1之间的5个点
for label in ax.get_xticklabels()+ax.get_yticklabels(): #设置x、y坐标轴标度的字体格式
label.set_fontsize(16) #字体大小为16
label.set_bbox(dict(facecolor='white',edgecolor='none',alpha=0.5)) #背景颜色为白色,边缘颜色无(隐藏),透明度0.5
plt.fill_between(x,np.abs(x)<0.5,y,y>0.5,color='blue',alpha=0.5) #填充颜色
plt.plot([np.pi/2,np.pi/2],[0,np.sin(np.pi/2)],color='yellow',linewidth=2,linestyle='-') #画线
import numpy as np
import matplotlib.pyplot as plt
fig=plt.figure()
fig1=fig.add_subplot(2,2,1) #把显示区域分为两行两列,fig1显示在第一块区域
n=128
x=np.random.normal(0,1,n) #随机生成100个0到1之间的服从正态分布的数
y=np.random.normal(0,1,n)
t=np.arctan2(y,x)
#plt.axes([0.025,0.025,0.95,0.95])
fig1.scatter(x,y,s=75,c=t,alpha=0.5) #s表示散点大小,c表示颜色,alpha表示透明度
plt.xlim(-1.5,1.5) #x的范围
plt.xticks([])
plt.ylim(-1.5,1.5) #y的范围
plt.yticks([])
plt.axis()
plt.title('scatter')
plt.xlabel('x')
plt.ylabel('y')
plt.show()
fig2=fig.add_subplot(2,2,2) #把显示区域分为两行两列,fig2显示在第二块区域
n=10
x=np.arrange(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)
fig2.bar(x,+y1,facecolor='#9999ff',edgecolor='white')
fig2.bar(x,-y2,facecolor='#ff9999',edgecolor='white')
for x,y in zip(x,y1):
plt.text(x+0.4,y+0.05,'%.2f'%y,ha='center',va='bottom')
for x,y in zip(x,y2):
plt.text(x+0.4,-y-0.05,'%.2f'%y,ha='center',va='top')
plt.show()
fig3=fig.add_subplot(2,2,3) #把显示区域分为两行两列,fig3显示在第三块区域
n=20
z=np.ones(n)
z[-1]*=2
plt.pie(z,explode=z*.05,color=['%f'%(i/float(n))for i in range(n)],labels=['%f'%(i/float(n))for i in range(n)])
pl.gca().set_aspect('equal')
plt.xticks([])
plt.yticks([])
fig4=fig.add_subplot(2,2,4,polar=True) #把显示区域分为两行两列,fig4显示在第四块区域
n=20
theta=np.arange(0.0,2*np.pi,2*np.pi/n)
radii=10*np.random.rand(n)
figure4.polar(thata,radii)
plt.show()