python基础之数据可视化matplotlib

      数据可视化图标的绘制需要安装matplotlib库,安装方法:cmd下pip install matplotlib,以及numpy库,安装法法:cmd下pip install numpy。使用numpy生产图像绘制需要的数据,如果已经有了数据可以读取数据到数组等,再通过import matplotlib.pyplot as plt导入plt对数据进行绘制等相关操作。

     plt中常用参数的含义:ls表示绘制的线的类型,lw(linewidth)表示绘制线的宽度,label这条线的名字,color或者c表示颜色,weight表示字体属性,alpha表示颜色的浓度,loclabel标签的位置。简单的示例如下:

import matplotlib.pyplot as plt
import numpy as np
#1从0-10中取100个点数
x=np.linspace(0,10,100)
y=np.random.rand(100)
y1=np.sin(x)
# 绘制线
plt.plot(x,y1,ls='-',lw=2,label='plot figure')
#绘制点
plt.scatter(x,y,label='scatter figure')
#背景网格刻制'-'实线,':'虚线以及其他一下线
plt.grid(linestyle=":",color="r")
#注释文本添加,有指向,通过xy来确定指向位置,xytext确定文本位置
plt.annotate(u"zhushi",xy=(np.pi/4,1.0),xytext=((np.pi/2)+1.0,.8),weight='bold',color='b',arrowprops=dict(arrowstyle='->',connectionstyle='arc3',color='b'))
#注释文本添加,无指向,通过制定x,y的坐标来确定显示位置
plt.text(3.10,0.09,'y=sin(x)',weight='bold',color='b')
#绘制水平竖直参考区域
plt.axhspan(ymin=0.0,ymax=0.5,facecolor='y',alpha=0.3)
plt.axvspan(xmin=4.0,xmax=6.0,facecolor='y',alpha=0.3)
#水平竖直参考线
plt.axhline(y=0.0,c='r',ls='--',lw=2)
plt.axvline(x=4.0,c='b',ls='-',lw=2)
# 添加标题
plt.title('y=sin(x)')
#控制label的显示的位置	upper right,upper left,lower left,lower right,right,center left,center right,lower center,upper center,center
plt.legend(loc='lower right')
plt.legend(loc='upper left')
#设置xlabel和ylabel的长度
plt.xlim(0,10)
plt.ylim(-1,1)
#设置坐标的标签文本
plt.xlabel("x")
plt.ylabel("y")
#显示绘制的图像
plt.show()

      如果直接在plt绘制的相关操作中输入中文的话,会不能识别,解决方法如下:

import matplotlib as mpl
mpl.rcParams["font.sans-serif"]=["FangSong"]#设置字体
mpl.rcParams["axes.unicode_minus"]=False#坐标轴轴线刻度标签

     柱状图绘制:

import matplotlib.pyplot as plt
import numpy as np
x=[1,2,3,4,5,6,7,8]
y=[3,1,9,5,8,2,9,10]
#绘制柱状图
plt.bar(x,y,align='center',color='b',tick_label=['a','b','c','d','e','f','g','h'],hatch='/',alpha=0.5)
#柱状图旋转90度后的条形图
plt.barh(x,y,align='center',color='b',tick_label=['a','b','c','d','e','f','g','h'],hatch='/',alpha=0.5)
plt.xlabel("物品")
plt.ylabel("数量")
plt.show()

      在柱状图的基础上实现柱状图的堆积和分块:不同方向的叠加分块要注意叠加分块的方向和距离。

#y方向堆积
plt.bar(x,y,align="center",color="b",tick_label=['A','B','C','D'],label="1")
plt.bar(x,y1,align="center",bottom=y,color="r",label="2")
#水平方向分块
xwidth=0.3
plt.bar(x,y,xwidth,color='c',align='center',label='1',alpha=0.5)
plt.bar(x+xwidth,y1,xwidth,color='b',align='center',label='2',alpha=0.5)

      直方图绘制:

import matplotlib.pyplot as plt
import numpy as np
box=np.random.randint(0,10,100)
plt.hist(box,bins=range(0,11,1),color='g',edgecolor='black',histtype='bar',rwidth=1,alpha=0.5)
plt.xlabel("物品")
plt.ylabel("数量")
plt.show()

          饼状图绘制:

import matplotlib.pyplot as plt
kinds="A","B","C","D"
colors=["#188eb6","#377eb8","#4daf4a","#984ea3"]
#每一个对应的占比
soldNums=[0.35,0.1,0.3,0.25]
plt.pie(soldNums,labels=kinds,autopct="%3.1f%%",startangle=0,colors=colors)
plt.show()

 极线图绘制:

import matplotlib.pyplot as plt
import numpy as np
theta=np.linspace(0.0,2*np.pi,12,endpoint=False)
r=30*np.random.rand(12)
plt.polar(theta,r,color="b",lw=2,marker="*",mfc="b",ms=10)
plt.show()

       折线图绘制:

import matplotlib.pyplot as plt
import numpy as np
x=np.linspace(0.5,2*np.pi,20)
y=np.random.randn(20)
plt.stem(x,y,linefmt=":",markerfmt="c",basefmt="-")
plt.show()

      误差图绘制:

import matplotlib.pyplot as plt
import numpy as np
x=np.linspace(0.1,0.6,6)
y=np.exp(x)
plt.errorbar(x,y,fmt="bo:",xerr=0.02,yerr=0.2)
plt.show()

      阶梯图绘制:

import matplotlib.pyplot as plt
import numpy as np
x=np.linspace(1,10,10)
y=np.sin(x)
plt.step(x,y,color="r",lw=2,where='pre')#where=post,pre,mid
plt.xticks(range(1,11,1))
plt.show()

      图形绘制:

import matplotlib.pyplot as plt
import numpy as np
score1=np.random.randint(0,100,10)
score2=np.random.randint(0,100,10)
x=[score1,score2]
colors=['#8dd3c7','#bebada']
labels=['A','B']
bins=range(0,101,10)
#histtype选择绘制的图形, histtype={‘bar’, ‘barstacked’, ‘step’, ‘stepfilled’}
#stacked=True位叠加的直方图,等于False位分块的直方图
plt.hist(x,bins=bins,color=colors,histtype='bar',rwidth=10,stacked=True,label=labels)
plt.legend(loc="upper left")
plt.show()

猜你喜欢

转载自blog.csdn.net/zx520113/article/details/84103437