博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

二、Python开发---42、matplotlib(5)

Posted on 2020-03-13 22:06  兰智杰  阅读(142)  评论(0)    收藏  举报

散点图

  使用scatter函数可以绘制随机点,该函数需要接收x坐标和y坐标的序列——plt.scatter(x,y)

  matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, verts=None, edgecolors=None, *, data=None, **kwargs)

  参数的解释:

  x,y:表示的是大小为(n)的数组,也就是我们即将绘制散点图的数据点

  s:是一个实数或者是一个数组大小为(n),这个是一个可选的参数,表示的是标记点的大小

  c:表示的是颜色,也是一个可选项,默认是蓝色'b',表示的是标记的颜色,或者可以是一个表示颜色的字符,或者是一个长度为n的表示颜色的序列等,但是c不可以是一个单独的RGB数字,也不可以是一个RGBA的序列,可以是他们的2维数组(只有一行)

  marker:表示的是标记的样式,默认的是'o'

  cmap:Colormap实体或者是一个colormap的名字,cmap仅仅当c是一个浮点数数组的时候才使用,如果没有申明就是image.cmap

  norm:Normalize实体来将数据亮度转化到0-1之间,也是只有c是一个浮点数的数组的时候才使用,如果没有申明,就是默认为colors.Normalize。

  vmin,vmax:实数,当norm存在的时候忽略,用来进行亮度数据的归一化

  alpha:实数,0-1之间

  linewidths:也就是标记点的长度

练习

  1、给定数据的散点图

  

import matplotlib.pyplot as plt
import numpy as np
import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False
x = [1,2,3,4,5,6,7,8]
y = [5,2,4,2,1,4,5,2]
T = np.random.rand(8)*125
plt.scatter(x,y, label='散点分布', c=T, s=25, marker="o",alpha = 0.5)
plt.xlabel('x')
plt.ylabel('y')
plt.title('散点图')
plt.legend()
plt.show()

  2、随机生成的散点图

  

import matplotlib.pyplot as plt
import matplotlib as mpl
import numpy as np
# 解决中文显示问题
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False
plt.figure(figsize=(8,6))
n=1000
#rand 均匀分布和 randn高斯分布
x=np.random.randn(1,n)
y=np.random.randn(1,n)
T1=np.arctan2(x,y)   #注意这里的2,如果不加则显示不对(网上没找到解释?)
T2=np.random.rand(1,n) * 125
plt.subplot(211)
plt.scatter(x,y,c=T1,s=30,alpha=0.4,marker='o')
plt.subplot(212)
plt.scatter(x,y,c=T2,s=30,alpha=0.4,marker='o')
#T:散点的颜色
#s:散点的大小
#alpha:是透明程度
plt.show()

三维图

  使用pyplot包和Matplotlib绘制三维图

  

 

 

 

#导入3D包
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
#创建X、Y、Z坐标(通过四个点确定一个3D图)
X=[1,1,2,2]
Y=[3,4,4,3]
Z=[1,100,1,1]
fig = plt.figure()
# 创建了一个Axes3D的子图放到figure画布里面
ax = Axes3D(fig)
ax.plot_trisurf(X, Y, Z)
plt.savefig('三维图.jpg')
plt.show()