matplotlib中的基本绘图类型及方法

python中matplotlib绘图包在实际的使用中出现的频率还是蛮高的,因为无论你做出什么样的结果,你必须展示出来别人才能知道你做的什么,做的怎么样。表达方式可以有文字,表格,图等,其中图是最为常见能够高效表达想法、成果的方法之一。
下面利用matplotlib对常见的各种 骚操作的 直方图、条形图、饼图等进行基础的实践,只是基础哈!大佬请绕道!

导入需要的包

    import matplotlib.pyplot as plt
    import  numpy as np
    import  pandas as pd
    from mpl_toolkits.mplot3d import  Axes3D

直方图 用hist()函数

	pop=np.random.randint(0,100,100)   #  随机取0-99这100个数 100次
	print(pop)
	n,bins,patches=plt.hist(pop,bins=10,edgecolor="w")   #  hist()接收一个序列样本 和期望把样本划分的份数bins为参数
   	plt.xlabel('数值')
	plt.ylabel('大小',fontsize=18)
	plt.show()
	plt.close()

条形图 bar(x,y,width=n), x 为横轴的序列号 y 为数值

	x=np.arange(12)
	values=np.random.randint(3,10,12)
	std1=np.random.random(12)   #
	plt.bar(x+1,values, width=0.6,yerr=std1,error_kw=			{'ecolor':'0.1',"capsize":6},alpha=0.5,label="first")     #  关键词 alpha 为条形图的为透明度  label为图例 结合lenendS
 # #   为了将横坐标的类别标在每个条形图的下方而不是右下角利用xticks
	plt.xticks(x,np.arange(12),color='g',fontsize=12)
	plt.legend('HAHAH',loc=2)#  第一个参数代表的是  横坐标的位置 第二参数代表的是 横坐标的数值  第三个是 appearance ofthe labels.的关键词
	plt.show()

水平条状图barh() # 其他用法和bar 相同

								不多比比

多序列条状图 在一个属性里有多种类别

	index=np.arange(5)
	v1=[2,5,1,7,9]
	v2=[8,5,7,9,3]
	v3=[4,6,2,5,7]
	bw=0.3
	plt.axis([-bw,5,0,10])
	plt.title('多序列条状图')
	 plt.bar(index,v1,bw,color='b')# 可以理解为 第一个参数为条状图的从index所处位置为中心 高为v1 宽度为bw 样色为
	plt.bar(index+bw,v2,bw,color='g')
	plt.bar(index+2*bw,v3,bw,color="r")
	plt.xticks(index+bw,['A','B','C','D','E'])
	plt.show()

水平条状图 只需要把程序中的axis里面坐标轴限改下 使用barh 和yticks

								不多比比

为pandas DataFrame 生成多序列条状图

data={'series1':[1,3,4,3,5],
       'series2':[2,4,5,2,4],
      'series3':[3,2,3,1,3] }
df=pd.DataFrame(data)
df.plot(kind='bar')    #   只需要调用plot()函数并调用关键字参数kind="bar"
plt.show()

多序列堆积条形图

series1=np.array([3,4,5,3])
series2=np.array([1,2,2,5])
series3=np.array([2,3,3,4])
index=np.arange(4)
plt.axis([-0.4,4,0,15])
#plt.bar(index,series1,color='r',width=0.5,edgecolor="k")
#plt.bar(index,series2,bottom=series1,color='b',width=0.5,edgecolor="k")
#plt.bar(index,series3,bottom=(series1+series2),color='g',width=0.5,edgecolor="k")
plt.xticks(index,["Jan15","Feb15","Mar","Apr"])
            
#  如果不想用纯色填充条形图可以设置填充图案 首先填充统一为白色color="w",再加填充图案hatch="\,/,|-.x,*"
# 且个数越多线条越密集
plt.bar(index,series1,color='w',hatch='xxX',width=0.8,edgecolor="k")
plt.bar(index,series2,bottom=series1,color='w',hatch=r'\\',width=0.8,edgecolor="k")
 plt.bar(index,series3,bottom=(series1+series2),color='w',hatch='///',width=0.8,edgecolor="k")
plt.show()

如果画水平多序列堆积条状图 只需要把axis barh yticks 用上就可以了

								不多比比

其他条形图

# 如果两个数据具有相同类别 除了使用基本条形图bar 曲线图plot   还可以对比bar
#facecolor   edgecolor
x0=np.arange(8)
y1=np.array([1,3,4,6,4,3,2,1])
y2=np.array((1,2,5,4,3,3,2,1))
plt.ylim(-7,7)
plt.bar(x0,y1,0.9,facecolor="r",edgecolor='w')
plt.bar(x0,-y2,0.9,facecolor="b",edgecolor='w')
 # plt.grid(True)
# #  为每个长条添加y标签值
for x,y in zip(x0,y1):     # 将x0和y 序列对应的元素结合起来
plt.text(x,y+0.2,"%d" %y,ha="center",va="bottom")    # 第一第二个参数为文本的位置  第三个为文本内容  之后就为关键词参数**keyword
for x, y in zip(x0, y2):
	plt.text(x, -y-0.2, "%d" % y, ha="center", va="top")
plt.show()

饼图pie()

labels=['Nokia','Sumsung','Apple','lumia']
values=[10,30,45,15]
colors=['y','r','b','c']
 #plt.pie(values,labels=labels,colors=colors)
# 如果需要对特定的某一块进行抽离 则应用关键词explode进行设置   也可以利用关键词对startangle对饼图的角度精选修改
# 用shadow=Ture用来添加阴影效果  用atuopct='%1.1f%%'  关键词参数用来给每个块状加上各自的比例
explode=[0.5,0,0,0]   #  里面的0-1元素为对应的某一块从中心的剥离抽离程度
plt.pie(values,labels=labels,explode=explode,shadow=True,autopct="%1.1f%%",colors=colors,startangle=180)
plt.axis('equal')

3D数据可视化功能 mplot3d

fig=plt.figure()
ax=Axes3D(fig)
x=np.arange(-2,2,0.1)
y=np.arange(-2,2,0.1)
x,y=np.meshgrid(x,y)   #计算出分割坐标
def f(x1,y1):
 	return (1-y1**5+x1**5)*np.exp(-x**2-y**2 
ax.plot_surface(x,y,f(x,y),rstride=1,cstride=1,cmap=plt.cm.jet)   # 用ax.plot.surface()绘制曲面

在其他子图中显示子图

# 总体思路就是首先创建画布fig= plt.figure()
# 再定位显示窗口的位置和大小ax=fig.add_axes()
# 在利用ax的各种属性进行作图
fig=plt.figure()   #  创建画布
ax=fig.add_axes([0.1,0.1,0.8,0.8])#ax1 = fig.add_axes([left, bottom, width, height]  创建画面显示窗口
inner_ax=fig.add_axes([0.2,0.6,0.25,0.25])
x=np.arange(0,10,0.01)
y=x**2
x1=x=np.arange(0,10,0.01)
y1=-x**2
ax.plot(x,y,"r")
inner_ax.plot(x1,y1,"c")
plt.show()
* 欢迎批评、指正!*
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值