关于matplotlib的那些事

图命名是中文乱码

需要执行如下步骤

1,找到如下目录

D:\Python27\Lib\site-packages\matplotlib\mpl-data
2,打开该目录下的matplotlibrc

3,font.family前的#去掉,然后在font.sans-serif  的DejaVu Sans前面添加Microsoft YaHei,

font.sans-serif     :Microsoft YaHei, DejaVu Sans, Bitstream Vera Sans, Lucida Grande, 

完结----

这个并不算原创,但是也不算转载。是自己在网上各种找资料,有些数据并没有改,因为懒得去构造它们之间的关系,我是数学小白,请见谅哈。

#coding=utf-8
'''
test1.jpg
fisk.txt
'''
'''
颜色(color 简写为 c):
蓝色'b' 绿色'g'红色'r' 蓝绿色(墨绿色)'c' 红紫色(洋红)'m'黄色'y' 黑色'k' 白色'w'
线型(linestyle 简写为 ls):
实线'-'虚线'--'虚点线'-.'点线':'点'.' 
点型(标记marker):
像素','圆形'o'上三角'^'下三角'v'左三角'<'右三角'>'方形's'加号'+' 叉形'x'棱形'D'细棱形'd'
三脚架朝下'1'(像'丫')三脚架朝上'2'三脚架朝左'3'三脚架朝右'4'
六角形'h'旋转六角形'H'五角形'p'垂直线'|'水平线'_'
plot()--折线图 hist()--直方图 xlabe() ylabe() xlim() ylim() title() legend() show()
'''
import matplotlib.pylab as pl
import matplotlib.pyplot as plt
import numpy as np
#折线图
pl.xlabel(u"横轴")
pl.ylabel(u"纵轴")
pl.title(u"图像")
x=np.linspace(0,10,1000)
y1=np.sin(x)
y2=np.cos(x*x)
line,=pl.plot(x,y1,'r-',label=u"y=sin(x)函数图",linewidth=1)
pl.plot(x,y2,'b--',label=u"y=cos(x*x)函数图",linewidth=2)#pl.plot(x,y1,x,y2)
pl.axis([0,10,-2,2]) #pl.xlim(0,10) pl.ylim(-2,2)
'''
ax=pl.gca()
ax.spines['right'].set_color('none')
'''
pl.legend(loc="upper right")
#loc-upper bottom right ledt 默认best
#handles=[]  plot返回的对象
#labels=[]  名字
pl.show()

#绘制带背景颜色的多子图
pl.figure(u"绘制多子图1")
pl.sca(pl.subplot(221,axisbg='r'))
pl.plot(range(10),[i for i in range(10)],'_-b',label=u"图2的第一个子图")
pl.legend()#-------
pl.sca(pl.subplot(222,axisbg='r'))
pl.plot(range(10),[i**2 for i in range(10)],'H--k',label=u"图2的第二个子图")
pl.legend()
pl.sca(pl.subplot(223,axisbg='r'))
pl.plot(range(10),[i**3 for i in range(10)],'h-.g',label=u"图2的第三个子图")
pl.legend()
pl.sca(plt.subplot(224,axisbg='r'))
pl.plot(range(10),[i**4 for i in  range(10)],'pm-',label=u"图2的第四个子图")
pl.legend()
pl.savefig('test1.jpg')

n=np.array([0,1,2,3,4,5])
x=np.linspace(-0.75,1,100)
fig,ax=pl.subplots(1,4,figsize=(14,5))
ax[0].scatter=ax[0].plot(x,x+0.25*np.random.randn(len(x)),'or')#不可以用pl
ax[0].set_title(u"子图1")
ax[0].set_xlabel(u"子图1横轴")
ax[0].set_ylabel(u"子图1纵轴")
ax[1].step(n,n**2,lw=2)
ax[2].bar(n,n**2,align='center',width=0.5,alpha=0.2)
ax[3].fill_between(x,x**2,x**3,color='r',alpha=0.4)
plt.show()

#从文件中读取数据
pl.figure(u"操作文件")
data=np.loadtxt('fisk.txt')
pl.plot(data[:,0],data[:,1],'o-r',label=u"从文件中读取数据")
pl.legend()
pl.show()

#柱状图
'''
rects1=plt.bar(                      #(x,data) 就是所要画的二维数据
        left=x,                      #x 是X坐标轴数据,即每个块的x轴起始位置
        height=data,                 #data是Y坐标轴的数据,即每个块的y轴高度
        width=[0.1,0.2,0.3],         #每一个块的显示宽度
        bottom=[1,2,3],              #每一个块的底部高度
        color='y',                   #块的颜色
        edgecolor='g',               #块的边界颜色
        linewidth=2,                 #块的线条宽度
        xerr=1,                      #x轴误差bar
        yerr=1,                      #y轴误差bar
        ecolor='r',                  #误差bar的颜色
        capsize=1,                   #误差bar的线条宽度
        orientation='vertical',     #块的方向  (horizontal,vertical)
        align="center",              #块的位置 (center, left, right)
        hold=None
        )
'''
pl.figure(u"直方图1")
data=np.random.randint(1,11,3)
x=np.arange(len(data))
rects=pl.bar(
    left=x,height=data,width=[0.1,0.2,0.3],bottom=[1,2,3],#水平柱状图plt.barh,属性中宽度width变成了高度height
    color='y',edgecolor='g',linewidth=1,
    xerr=1,yerr=1,ecolor='r',capsize=1,
    orientation='vertical',align="center",hold=None
)
pl.figure(u"直方图2")
rects=pl.bar(left=(0.2,1),height=(1,0.5),width=0.1,align="center",yerr=0.000001,color=('r','g'))  #一个对象一种颜色
pl.xticks((0.2,1),(u'第一列',u'第二列')) #增加直方图脚注
pl.show()

#直方图,盒图boxplot
pl.figure(u"柱状统计图1")
l=100+15*np.random.randn(10000)
n,bins,patches=pl.hist(l,50,color='y',normed=1,alpha=0.3)
pl.axis([40,160,0,0.03])
pl.grid(True)
pl.figure(u"柱状统计图2")
l=np.random.randn(100)
pl.sca(pl.subplot(121))
pl.hist(l)
pl.sca(pl.subplot(122))
pl.boxplot(l)
pl.show()

#散点图
pl.figure(u"散点图")
x=np.random.randn(1,1000)
y=np.random.randn(1,1000)
#T=np.arctan2(x,y) #散点的颜色
#pl.scatter(x,y,c=T,s=25,alpha=0.4,marker='+') #s--散点的大小
pl.plot(x,y,'o')
pl.show()

#饼图
'''
plt.pie(data,                          # 每个饼块的实际数据,如果大于1,会进行归一化,计算percentage
        explode=[0.0,0.1,0.2],               # 每个饼块离中心的距离
        colors=['y','r','g'],               # 每个饼块的颜色
        labels=['women','men','unknown'], # 每个饼块的标签
        labeldistance=1.2,                   # 每个饼块标签到中心的距离
        autopct='%1.1f%%',                  # 百分比的显示格式
        pctdistance=0.4,                     # 百分比到中心的距离
        shadow=True,                         # 每个饼块是否显示阴影
        startangle=0,                        # 默认从x轴正半轴逆时针起
        radius=1.0                           # 饼块的半径
        )
'''
pl.figure(u"饼图")
da=np.random.randint(1,11,5)
pl.pie(da,explode=[0,0,.2,0,0,])
pl.show()

#对数坐标图
w = np.linspace(0.1, 1000, 1000)
p = np.abs(1/(1+0.1j*w)) # 计算低通滤波器的频率响应

plt.subplot(221)
plt.plot(w, p, linewidth=2)
plt.ylim(0,1.5)

plt.subplot(222)
plt.semilogx(w, p, linewidth=2) #semilogx()绘制的X轴对数坐标系
plt.ylim(0,1.5)

plt.subplot(223)
plt.semilogy(w, p, linewidth=2) #为semilogy()绘制的Y轴对数坐标系
plt.ylim(0,1.5)

plt.subplot(224)
plt.loglog(w, p, linewidth=2) #loglog()绘制的双对数坐标系
plt.ylim(0,1.5)

plt.show()
#极坐标图
fig=pl.figure(u"")
ax=fig.add_axes([0.0,0.0,.6,.6],polar=True)
t=np.linspace(0,2*np.pi,100)
ax.plot(t,t,color='y',lw=3)
pl.show()

#等值图
y, x = np.ogrid[-2:2:200j, -3:3:300j]
z = x * np.exp( - x**2 - y**2)
extent = [np.min(x), np.max(x), np.min(y), np.max(y)]
plt.figure(figsize=(10,4))
plt.subplot(121)
cs = plt.contour(z,10,extent=extent)
plt.clabel(cs)
plt.subplot(122)
plt.contourf(x.reshape(-1),y.reshape(-1),z,20) #带填充效果的等值线。
plt.show()

#动图--http://www.jb51.net/article/66441.htm
x=np.random.rand(10)
fig=pl.figure(u"1")
ax1=fig.add_subplot(111,axisbg='y')
line,=ax1.plot(x)
def update(data):
    line.set_ydata(data)
    return line,
def data_gen():
    while True:
        yield np.random.rand(10)
ani=animation.FuncAnimation(fig,update,data_gen,interval=100)
pl.show()

x=np.random.rand(10)
m=[[0.03, 0.86, 0.65, 0.34, 0.34, 0.02, 0.22, 0.74, 0.66, 0.65],
  [0.43, 0.18, 0.63, 0.29, 0.03, 0.24, 0.86, 0.07, 0.58, 0.55],
  [0.66, 0.75, 0.01, 0.94, 0.72, 0.77, 0.20, 0.66, 0.81, 0.52]
]
fig=pl.figure(u"2")
ax2=fig.add_subplot(111,axisbg='c')
line,=ax2.plot(x)
def updata(data):
    line.set_ydata(data)
    return line,
ani=animation.FuncAnimation(fig,updata,m,interval=200)
pl.show()
et=time.clock()

from mpl_toolkits.mplot3d import Axes3D
fig=plt.figure()
ax=Axes3D(fig)
x=np.arange(-4,4,0.25)
y=np.arange(-4,4,0.25)
x,y=np.meshgrid(x,y)
r=np.sqrt(x**2+y**2)
z=np.sin(r)
ax.plot_surface(x,y,z,rstride=1,cstride=1,cmap=plt.get_cmap('rainbow'))
ax.contourf(x,y,z,zdir='z',offset=-2,cmap='rainbow')
ax.set_zlim(-2,2)
plt.show()

                               

                  

 


完结:有疑问的可以评论。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值