数据结构论坛

注册

 

发新话题 回复该主题

Python数据可视化实例之绘制图表虫 [复制链接]

1#
北京看白癜风哪间医院好 https://wapjbk.39.net/yiyuanzaixian/bjzkbdfyy/xcxbdf/

Python数据可视化实例之绘制图表

原创虫虫安全-09-:41:57

得利于语言的简单明了、丰富的数据结构、丰富的类和模块,Python如今成了数据科学中的香饽饽,成了matlab、R语言之外又一强大的数据分析工具。抛开其他方面的、今天虫虫带大家一起来探索Python在数据可视化方面的应用。我们以最基本的几种图标为实例来介绍Pythonmatplotlib的强大的作图能力。

1.折线图

在绘制折线图时,如果你的数据很小,图表的线条有点折,当你数据集比较大时候,比如超过个点,则会呈现相对平滑的曲线。

在这里,我们使用三个plt.plot绘制了,不同斜率(1,2和3)的三条线。

importnumpyasnp

importmatplotlib.pyplotasplt

cc=np.linspace(0,2,)

plt.rcParams[font.sans-serif]=[SimHei]

plt.plot(cc,cc,label=linear)

plt.plot(cc,cc**2,label=两倍)

plt.plot(cc,cc**3,label=三倍)

plt.xlabel(xlabel)

plt.ylabel(ylabel)

plt.title(折线图)

plt.legend()

plt.show()

cc=np.linspace(0,2,)

plt.plot(cc,cc,label=linear)

plt.plot(cc,cc**2,label=quadratic)

plt.plot(cc,cc**3,label=cubic)

plt.xlabel(xlabel)

plt.ylabel(ylabel)

结果显示,如下:

注意为了显示中文,我们plt.rcParams属性设置了中文字体,不然不能正确显示中文title的。

2.散点图

散点图和折线图的原理差不多;如果使用直线连接散点图中的点,得到的就是折线图。所以你只需要设置线型来绘制散点图。

注意:次例中我们也画了三行。不同的地方时,只使用了一个plt.plot。

importnumpyasnp

importmatplotlib.pyplotasplt

x=np.arange(0.,5.,0.2)

plt.plot(x,x,r--,x,x**2,bs,x,x**3,g^)

plt.show()

图表显示结果为:

3.直方图

直方图也是一种常用的简单图表,本例中我们在同一张图片中绘制两个概率直方图。

importnumpyasnp

importmatplotlib.pyplotasplt

np.random.seed()

mu1,sigma1=,15

mu2,sigma2=80,15

x1=mu1+sigma1*np.random.randn(00)

x2=mu2+sigma2*np.random.randn(00)

n1,bins1,patches1=plt.hist(x1,50,density=True,facecolor=g,alpha=1)

n2,bins2,patches2=plt.hist(x2,50,density=True,facecolor=r,alpha=0.2)

plt.rcParams[font.sans-serif]=[SimHei]

plt.xlabel(智商)

plt.ylabel(置信度)

plt.title(IQ直方图)

plt.text(,.,r$mu=,sigma=15$)

plt.text(50,.,r$mu=80,sigma=15$)

#设置坐标范围

plt.axis([40,,0,0.03])

plt.grid(True)

plt.show()

显示效果为:

4.条形图

我们要介绍的第四种,图表类型是条形图,我们这儿引入稍微比较复杂的条形图。

4.1平行条形图

此例中,我们引入三组(a,b,c)5个随机数(0~1),并用条形图打印出来,做比较

importnumpyasnp

importmatplotlib.pyplotasplt

size=5

a=np.random.random(size)

b=np.random.random(size)

c=np.random.random(size)

x=np.arange(size)

total_width,n=0.8,3

width=total_width/n

#redrawthecoordinatesofx

x=x-(total_width-width)/2

#hereistheoffset

plt.bar(x,a,width=width,label=a)

plt.bar(x+width,b,width=width,label=b)

plt.bar(x+2*width,c,width=width,label=c)

plt.legend()

plt.show()

显示效果为:

4.2堆积条形图

数据同上,不过条形plot的时候,用的相互的值大小差异(水平方向),而不是条柱平行对比。

importnumpyasnp

importmatplotlib.pyplotasplt

size=5

a=np.random.random(size)

b=np.random.random(size)

c=np.random.random(size)

x=np.arange(size)

plt.bar(x,a,width=0.5,label=a,fc=r)

plt.bar(x,b,bottom=a,width=0.5,label=b,fc=g)

plt.bar(x,c,bottom=a+b,width=0.5,label=c,fc=b)

plt.ylim(0,2.5)

plt.legend()

plt.grid(True)

plt.show()

显示效果为:

5.饼图

饼图是对比数量比例的最佳显示方式。

5.1一般饼图

ABCD四个数据,我们以饼图方式显示器大小对比。

importmatplotlib.pyplotasplt

labels=A,B,C,D

sizes=[15,30,45,10]

explode=(0,0.1,0,0)

plt.pie(sizes,explode=explode,labels=labels,autopct=%1.1f%%,

shadow=True,startangle=90)

plt.axis(equal)

plt.show()

显示效果为:

5.2嵌套饼图

importnumpyasnp

importmatplotlib.pyplotasplt

size=0.3

vals=np.array([[60.,32.],[37.,40.],[29.,10.]])

cmap=plt.get_cmap(tab20c)

outer_colors=cmap(np.arange(3)*4)

inner_colors=cmap(np.array([1,2,5,6,9,10]))

print(vals.sum(axis=1))

#[92.77.39.]

plt.pie(vals.sum(axis=1),radius=1,colors=outer_colors,

wedgeprops=dict(width=size,edgecolor=w))

print(vals.flatten())

#[60.32.37.40.29.10.]

plt.pie(vals.flatten(),radius=1-size,colors=inner_colors,

wedgeprops=dict(width=size,edgecolor=w))

#equalmakesitaperfectcircle

plt.axis(equal)

plt.show()

显示效果为:

5.3极轴饼图

极轴饼图是一种非常酷的图表,让我们看他的源码:

importnumpyasnp

importmatplotlib.pyplotasplt

np.random.seed()

N=10

theta=np.linspace(0.0,2*np.pi,N,endpoint=False)

radii=10*np.random.rand(N)

width=np.pi/4*np.random.rand(N)

ax=plt.subplot(,projection=polar)

bars=ax.bar(theta,radii,width=width,bottom=0.0)

forr,barinzip(radii,bars)/p>

bar.set_facecolor(plt.cm.viridis(r/10.))

bar.set_alpha(0.5)

plt.show()

显示效果为:

6.3D图表

3D图表也是能我们展示出超想象力的视觉效果的图表。

6.1三维散点图

首先来看看三维的散点图,源码:

importnumpyasnp

importmatplotlib.pyplotasplt

frommpl_toolkits.mplot3dimportAxes3D

data=np.random.randint(0,,size=[40,40,40])

x,y,z=data[0],data[1],data[2]

ax=plt.subplot(,projection=3d)

ax.scatter(x[:10],y[:10],z[:10],c=y)

ax.scatter(x[10:20],y[10:20],z[10:20],c=r)

ax.scatter(x[30:40],y[30:40],z[30:40],c=g)

ax.set_zlabel(Z)

ax.set_ylabel(Y)

ax.set_xlabel(X)

plt.show()

显示效果为:

6.23D平面图

我们要用到mpl_toolkits.mplot3d这个3D模块包,安装这个包后,绘制一个超酷的3D图只需两行代码:

frommatplotlibimportpyplotasplt

importnumpyasnp

frommpl_toolkits.mplot3dimportAxes3D

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)

显示效果为:

怎么样,效果很酷把,好今天虫虫就给大家介绍到这里,如果你有任何问题,或者需要本文提到的源码包,请

分享 转发
TOP
发新话题 回复该主题