之前我跟着书上的讲解,学习了二维和三维的一些绘图方法,后面画自己的东西的时候也用上了一些,感觉还是不错的,但是当我感觉我对matplotlib模块已经有了一个大致的了解的时候,现实突然敲醒了我,还早呢,才学了些皮毛,今天早上在一个公众号上看到了一些使用matplotlib库的其他方法,就来和大家分享一下,也同样是自己的一种积累。
一、散点图:
这个主要用到的是scatter函数,用个最简单的例子来看看:
import matplotlib.pyplot as plt
import numpy as np
x=np.linspace(0,10,100)
y=np.cos(np.sin(x))
fig=plt.figure()
ax=fig.add_subplot(1,1,1)
ax.scatter(x,y,marker="o",color="r")
plt.show()
(左下角的不适用那个是我屏幕的问题,和程序没有半毛钱关系) scatter函数和plot函数的区别在于,scatter函数可以针对每个点设置不同属性,然后我们还可以通过数据集合对这些属性进行设置:
r=np.random.RandomState(0)
x=np.abs(r.randn(100))
y=np.abs(r.randn(100))
colors=np.abs(r.randn(100))
sizes=np.abs(1000*r.randn(100))
plt.scatter(x,y,c=colors,s=sizes,alpha=0.3,cmap='viridis')
plt.colorbar()
plt.show()
你别说,你还真别说,挺好看的。
前两天学机器学习的时候,里面有一个鸢尾花集,来看看绘制鸢尾花集的方法:
import matplotlib.pyplot as plt
import numpy as np
from sklearn.datasets import load_iris
iris=load_iris()
features=iris.data.T
plt.scatter(features[0],features[1],alpha=0.2,s=100*features[3],c=iris.target,cmap='viridis')
plt.xlabel(iris.feature_names[0])
plt.xlabel(iris.feature_names[1])
plt.show()
从这里就可以看出,散点图是可以同时表征数据集的不同维度的特征,这对我们之后展示和分析数据集非常有帮助。
ok
二、连续误差,之前有讲到误差可视化,可以用errorbar函数来绘制误差条,实际上,有些时候可能需要对连续值展示误差条,我们可以将plot和fill_between两个函数结合在一起来实现,具体展示的话,有一个高斯过程回归方法的例子,来看一下:
import matplotlib.pyplot as plt
import numpy as np
# from sklearn.datasets import load_iris
from sklearn.gaussian_process import GaussianProcessRegressor
model=lambda x:x*np.sin(x)
xdata=np.array([1,3,5,6,8])
ydata=model(xdata)
# 计算高斯回归过程
gp=GaussianProcessRegressor()
gp.fit(xdata[:,np.newaxis],ydata)
xfit=np.linspace(0,10,1000)
yfit,std=gp.predict(xfit[:,np.newaxis],return_std= True)
dyfit=2*std
plt.plot(xdata,ydata,"or")
plt.plot(xfit,yfit,"-",color="gray")
plt.fill_between(xfit,yfit-dyfit,yfit+dyfit,color='gray',alpha=0.2)
plt.xlim(0,10)
plt.show()
三、画一个密度和轮廓图,contour可以绘制轮廓,contourf可以填充区域颜色,这和matlab里面的函数差不多,我就不用他公众号上给出的例子了,直接用我之前的一个例子:
data=np.genfromtxt("I:out/wavesPhoto/250step.data")
plt.contour(data,cmap='gray')
plt.show()
做的一个很简单的波场快照:
把contour改成contourf之后,我觉得这个效果比前者更好一些
嗯???灰度的效果还不错哎,和matlab的效果差不多了。,然后你也可以在后面加一句plt.colorbar()函数,提供一个色棒以供参考。
最后,来一个绘制莫比乌斯带的例子,这个来源于公众号,结尾我会给大家一个这篇文章的链接,
theta=np.linspace(0,2*np.pi,300)
w=np.linspace(-0.25,0.24,8)
w,theta=np.meshgrid(w,theta)
phi=0.5*theta
r=1+w*np.cos(phi)
x=np.ravel(r*np.cos(theta))
y=np.ravel(r*np.sin(theta))
z=np.ravel(w*np.sin(phi))
from matplotlib.tri import triangulation
tri=triangulation.Triangulation(np.ravel(w),np.ravel(theta),triangles=None, mask=None)
ax=plt.axes(projection='3d')
ax.plot_trisurf(x,y,z,triangles=tri.triangles,cmap='viridis',linewidth=0.2)
ax.set_xlim(-1,1)
ax.set_ylim(-1,1)
# ax.set_zlim(-1,1)
plt.show()
行了,大概就是这么些,其实那片博文里面东西挺多的,但是,很多之前就已经写过了,再就不写了,如果有想看那片公众号文章的,这是他的链接:【Python】11种 Matplotlib 科研论文图表教程(附代码)