python中matplotlib绘图包在实际的使用中出现的频率还是蛮高的,因为无论你做出什么样的结果,你必须展示出来别人才能知道你做的什么,做的怎么样。表达方式可以有文字,表格,图等,其中图是最为常见能够高效表达想法、成果的方法之一。
下面利用matplotlib对常见的各种 骚操作的 直方图、条形图、饼图等进行基础的实践,只是基础哈!大佬请绕道!
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from mpl_toolkits.mplot3d import Axes3D
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()
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
不多比比
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()
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')
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()