【Python知识】可视化函数plt.scatter
后台-插件-广告管理-内容页头部广告(手机) |
目录
一、说明
二、函数和参数详解
2.1 scatter函数原型
2.2 参数详解
2.3 其中散点的形状参数marker如下:
2.4 其中颜色参数c如下:
三、画图示例
3.1 关于坐标x,y和s,c
3.2 多元高斯的情况
3.3 绘制例子
3.4 绘图例3
3.5 同心绘制
3.6 有标签绘制
3.7 直线划分
3.8 曲线划分
一、说明
关于matplotlib的scatter函数有许多活动参数,如果不专门注解,是无法掌握精髓的,本文专门针对scatter的参数和调用说起,并配有若干案例。
二、函数和参数详解
2.1 scatter函数原型
matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None, vmin=None, vmax=None, alpha=None, linewidths=None, *, edgecolors=None, plotnonfinite=False, data=None, **kwargs)
2.2 参数详解
属性 | 参数 | 意义 |
坐标 | x,y | 输入点列的数组,长度都是size |
点大小 | s | 点的直径数组,默认直径20,长度最大size |
点颜色 | c | 点的颜色,默认蓝色 'b',也可以是个 RGB 或 RGBA 二维行数组。 |
点形状 | marker | 点的样式,默认小圆圈 'o'。 |
调色板 | cmap | Colormap,默认 None,标量或者是一个 colormap 的名字,只有 c 是一个浮点数数组时才使用。如果没有申明就是 image.cmap。 |
亮度(1) | norm | Normalize,默认 None,数据亮度在 0-1 之间,只有 c 是一个浮点数的数组的时才使用。 |
亮度(2) | vmin,vmax | 亮度设置,在 norm 参数存在时会忽略。 |
透明度 | alpha | 透明度设置,0-1 之间,默认 None,即不透明 |
线 | linewidths | 标记点的长度 |
颜色 | edgecolors | 颜色或颜色序列,默认为 'face',可选值有 'face', 'none', None。 |
plotnonfinite | 布尔值,设置是否使用非限定的 c ( inf, -inf 或 nan) 绘制点。 | |
**kwargs | 其他参数。 |
2.3 其中散点的形状参数marker如下:
2.4 其中颜色参数c如下:
三、画图示例
3.1 关于坐标x,y和s,c
- import numpy as np
- import matplotlib.pyplot as plt
- # Fixing random state for reproducibility
- np.random.seed(19680801)
- N = 50
- x = np.random.rand(N)
- y = np.random.rand(N)
- colors = np.random.rand(N) # 颜色可以随机
- area = (30 * np.random.rand(N))**2 # 点的宽度30,半径15
- plt.scatter(x, y, s=area, c=colors, alpha=0.5)
- plt.show()
注意:以上核心语句是:
plt.scatter(x, y, s=area, c=colors, alpha=0.5, marker=",")
其中:x,y,s,c维度一样就能成。
3.2 多元高斯的情况
-
- import numpy as np
- import matplotlib.pyplot as plt
- fig=plt.figure(figsize=(8,6))
- #Generating a Gaussion dataset:
- #creating random vectors from the multivariate normal distribution
- #given mean and covariance
- mu_vec1=np.array([0,0])
- cov_mat1=np.array([[1,0],[0,1]])
- X=np.random.multivariate_normal(mu_vec1,cov_mat1,500)
- R=X**2
- R_sum=R.sum(axis=1)
- plt.scatter(X[:,0],X[:,1],color='green',marker='o', =32.*R_sum,edgecolor='black',alpha=0.5)
- plt.show()
-
3.3 %20绘制例子
%20- from%20matplotlib%20import%20pyplot%20as%20plt
- import%20numpy%20as%20np
- #%20Generating%20a%20Gaussion%20dTset:
- #Creating%20random%20vectors%20from%20the%20multivaritate%20normal%20distribution
- #givem%20mean%20and%20covariance
- %20
- mu_vecl%20=%20np.array([0,%200])
- cov_matl%20=%20np.array([[2,0],[0,2]])
- %20
- x1_samples%20=%20np.random.multivariate_normal(mu_vecl,%20cov_matl,100)
- x2_samples%20=%20np.random.multivariate_normal(mu_vecl+0.2,%20cov_matl%20+0.2,%20100)
- x3_samples%20=%20np.random.multivariate_normal(mu_vecl+0.4,%20cov_matl%20+0.4,%20100)
- %20
- plt.figure(figsize%20=%20(8,%206))
- %20
- plt.scatter(x1_samples[:,0],%20x1_samples[:,%201],%20marker='x',
- %20%20%20%20%20%20%20%20%20%20%20color%20=%20'blue',%20alpha=0.7,%20label%20=%20'x1%20samples')
- plt.scatter(x2_samples[:,0],%20x1_samples[:,1],%20marker='o',
- %20%20%20%20%20%20%20%20%20%20%20color%20='green',%20alpha=0.7,%20label%20=%20'x2%20samples')
- plt.scatter(x3_samples[:,0],%20x1_samples[:,1],%20marker='^',
- %20%20%20%20%20%20%20%20%20%20%20color%20='red',%20alpha=0.7,%20label%20=%20'x3%20samples')
- plt.title('Basic%20scatter%20plot')
- plt.ylabel('variable%20X')
- plt.xlabel('Variable%20Y')
- plt.legend(loc%20=%20'upper%20right')
- %20
- plt.show()
- %20
- %20
- %20%20%20%20import%20matplotlib.pyplot%20as%20plt
- %20%20%20%20
- %20%20%20%20fig,ax%20=%20plt.subplots()
- %20%20%20%20
- %20%20%20%20ax.plot([0],[0],%20marker="o",%20%20markersize=10)
- %20%20%20%20ax.plot([0.07,0.93],[0,0],%20%20%20%20linewidth=10)
- %20%20%20%20ax.scatter([1],[0],%20%20%20%20%20%20%20%20%20%20%20s=100)
- %20%20%20%20
- %20%20%20%20ax.plot([0],[1],%20marker="o",%20%20markersize=22)
- %20%20%20%20ax.plot([0.14,0.86],[1,1],%20%20%20%20linewidth=22)
- %20%20%20%20ax.scatter([1],[1],%20%20%20%20%20%20%20%20%20%20%20s=22**2)
- %20%20%20%20
- %20%20%20%20plt.show()
- %20
- %20
- %20
- ![image.png](http://upload-images.jianshu.io/upload_images/8730384-8d27a5015b37ee97.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
- import matplotlib.pyplot as plt
- for dpi in [72,100,144]:
- fig,ax = plt.subplots(figsize=(1.5,2), dpi=dpi)
- ax.set_title("fig.dpi={}".format(dpi))
- ax.set_ylim(-3,3)
- ax.set_xlim(-2,2)
- ax.scatter([0],[1], s=10**2,
- marker="s", linewidth=0, label="100 points^2")
- ax.scatter([1],[1], s=(10*72./fig.dpi)**2,
- marker="s", linewidth=0, label="100 pixels^2")
- ax.legend(loc=8,framealpha=1, fontsize=8)
- fig.savefig("fig{}.png".format(dpi), bbox_inches="tight")
- plt.show()
3.4%20绘图例3
%20- import%20matplotlib.pyplot%20as%20plt
- %20
- for%20dpi%20in%20[72,100,144]:
- %20
- %20%20%20%20fig,ax%20=%20plt.subplots(figsize=(1.5,2),%20dpi=dpi)
- %20%20%20%20ax.set_title("fig.dpi={}".format(dpi))
- %20
- %20%20%20%20ax.set_ylim(-3,3)
- %20%20%20%20ax.set_xlim(-2,2)
- %20
- %20%20%20%20ax.scatter([0],[1],%20s=10**2,%20
- %20%20%20%20%20%20%20%20%20%20%20%20%20%20%20marker="s",%20linewidth=0,%20label="100%20points^2")
- %20%20%20%20ax.scatter([1],[1],%20s=(10*72./fig.dpi)**2,%20
- %20%20%20%20%20%20%20%20%20%20%20%20%20%20%20marker="s",%20linewidth=0,%20label="100%20pixels^2")
- %20
- %20%20%20%20ax.legend(loc=8,framealpha=1,%20fontsize=8)
- %20
- %20%20%20%20fig.savefig("fig{}.png".format(dpi), bbox_inches="tight")
- plt.show()
3.5 %20同心绘制
%20- plt.scatter(2,%201,%20s=4000,%20c='r')
- plt.scatter(2,%201,%20s=1000%20,c='b')
- plt.scatter(2,%201,%20s=10,%20c='g')
3.6%20有标签绘制
%20- import%20matplotlib.pyplot%20as%20plt
- %20
- x_coords%20=%20[0.13,%200.22,%200.39,%200.59,%200.68,%200.74,0.93]
- y_coords%20=%20[0.75,%200.34,%200.44,%200.52,%200.80,%200.25,0.55]
- %20
- fig%20=%20plt.figure(figsize%20=%20(8,5))
- %20
- plt.scatter(x_coords,%20y_coords,%20marker%20=%20's',%20s%20=%2050)
- for%20x,%20y%20in%20zip(x_coords,%20y_coords):
- %20%20%20%20plt.annotate('(%s,%s)'%(x,y),%20xy=(x,y),xytext%20=%20(0,%20-10),%20textcoords%20=%20'offset%20points',ha%20=%20'center',%20va%20=%20'top')
- plt.xlim([0,1])
- plt.ylim([0,1])
- plt.show()
3.7%20直线划分
%20- #%202-category%20classfication%20with%20random%202D-sample%20data
- #%20from%20a%20multivariate%20normal%20distribution
- %20
- import%20numpy%20as%20np
- from%20matplotlib%20import%20pyplot%20as%20plt
- %20
- def%20decision_boundary(x_1):
- %20%20%20%20"""Calculates%20the%20x_2%20value%20for%20plotting%20the%20decision%20boundary."""
- #%20%20%20%20return%204%20-%20np.sqrt(-x_1**2%20+%204*x_1%20+%206%20+%20np.log(16))
- %20%20%20%20return%20-x_1%20+%201
- %20
- #%20Generating%20a%20gaussion%20dataset:
- #%20creating%20random%20vectors%20from%20the%20multivariate%20normal%20distribution
- #%20given%20mean%20and%20covariance
- %20
- mu_vec1%20=%20np.array([0,0])
- cov_mat1%20=%20np.array([[2,0],[0,2]])
- x1_samples%20=%20np.random.multivariate_normal(mu_vec1,%20cov_mat1,100)
- mu_vec1%20=%20mu_vec1.reshape(1,2).T%20#%20TO%201-COL%20VECTOR
- %20
- mu_vec2%20=%20np.array([1,2])
- cov_mat2%20=%20np.array([[1,0],[0,1]])
- x2_samples%20=%20np.random.multivariate_normal(mu_vec2,%20cov_mat2,%20100)
- mu_vec2%20=%20mu_vec2.reshape(1,2).T%20#%20to%202-col%20vector
- %20
- #%20Main%20scatter%20plot%20and%20plot%20annotation
- %20
- f,%20ax%20=%20plt.subplots(figsize%20=%20(7,%207))
- ax.scatter(x1_samples[:,%200],%20x1_samples[:,1],%20marker%20=%20'o',color%20=%20'green',%20s=40)
- ax.scatter(x2_samples[:,%200],%20x2_samples[:,1],%20marker%20=%20'^',color%20=%20'blue',%20s%20=40)
- plt.legend(['Class1%20(w1)',%20'Class2%20(w2)'],%20loc%20=%20'upper%20right')
- plt.title('Densities%20of%202%20classes%20with%2025%20bivariate%20random%20patterns%20each')
- plt.ylabel('x2')
- plt.xlabel('x1')
- ftext%20=%20'p(x|w1)%20-N(mu1=(0,0)^t,%20cov1%20=%20I)\np.(x|w2)%20-N(mu2%20=%20(1,%201)^t),%20cov2%20=I'
- plt.figtext(.15,.8,%20ftext,%20fontsize%20=%2011,%20ha%20='left')
- %20
- #Adding%20decision%20boundary%20to%20plot
- %20
- x_1%20=%20np.arange(-5,%205,%200.1)
- bound%20=%20decision_boundary(x_1)
- plt.plot(x_1,%20bound,%20'r--',%20lw%20=%203)
- %20
- x_vec%20=%20np.linspace(*ax.get_xlim())
- x_1%20=%20np.arange(0,%20100,%200.05)
- %20
- plt.show()
3.8%20曲线划分
%20- #%202-category%20classfication%20with%20random%202D-sample%20data
- #%20from%20a%20multivariate%20normal%20distribution
- %20
- import%20numpy%20as%20np
- from%20matplotlib%20import%20pyplot%20as%20plt
- %20
- def%20decision_boundary(x_1):
- %20%20%20%20"""Calculates%20the%20x_2%20value%20for%20plotting%20the%20decision%20boundary."""
- %20%20%20%20return%204%20-%20np.sqrt(-x_1**2%20+%204*x_1%20+%206%20+%20np.log(16))
- %20
- #%20Generating%20a%20gaussion%20dataset:
- #%20creating%20random%20vectors%20from%20the%20multivariate%20normal%20distribution
- #%20given%20mean%20and%20covariance
- %20
- mu_vec1%20=%20np.array([0,0])
- cov_mat1%20=%20np.array([[2,0],[0,2]])
- x1_samples%20=%20np.random.multivariate_normal(mu_vec1,%20cov_mat1,100)
- mu_vec1%20=%20mu_vec1.reshape(1,2).T%20#%20TO%201-COL%20VECTOR
- %20
- mu_vec2%20=%20np.array([1,2])
- cov_mat2%20=%20np.array([[1,0],[0,1]])
- x2_samples%20=%20np.random.multivariate_normal(mu_vec2,%20cov_mat2,%20100)
- mu_vec2%20=%20mu_vec2.reshape(1,2).T%20#%20to%202-col%20vector
- %20
- #%20Main%20scatter%20plot%20and%20plot%20annotation
- %20
- f,%20ax%20=%20plt.subplots(figsize%20=%20(7,%207))
- ax.scatter(x1_samples[:,%200],%20x1_samples[:,1],%20marker%20=%20'o',color%20=%20'green',%20s=40)
- ax.scatter(x2_samples[:,%200],%20x2_samples[:,1],%20marker%20=%20'^',color%20=%20'blue',%20s%20=40)
- plt.legend(['Class1%20(w1)',%20'Class2%20(w2)'],%20loc%20=%20'upper%20right')
- plt.title('Densities%20of%202%20classes%20with%2025%20bivariate%20random%20patterns%20each')
- plt.ylabel('x2')
- plt.xlabel('x1')
- ftext%20=%20'p(x|w1)%20-N(mu1=(0,0)^t,%20cov1%20=%20I)\np.(x|w2)%20-N(mu2%20=%20(1,%201)^t),%20cov2%20=I'
- plt.figtext(.15,.8,%20ftext,%20fontsize%20=%2011,%20ha%20='left')
- %20
- #Adding%20decision%20boundary%20to%20plot
- %20
- x_1%20=%20np.arange(-5,%205,%200.1)
- bound%20=%20decision_boundary(x_1)
- plt.plot(x_1,%20bound,%20'r--',%20lw%20=%203)
- %20
- x_vec%20=%20np.linspace(*ax.get_xlim())
- x_1%20=%20np.arange(0,%20100,%200.05)
- %20
- plt.show()
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。
在线投稿:投稿 站长QQ:1888636
后台-插件-广告管理-内容页尾部广告(手机) |