Matplotlib-第3关:散点图


任务描述

本关任务:编写一个包含三组不同样式的散点图。

相关知识

为了完成本关任务,你需要掌握:1.两种绘制散点图的方法,2.散点图常用的配置项。

  • 适用场景:散点图适用二维或三维的数据集。比如相关性分析、 数据分布情况。
plot绘制散点图

散点图也是在数据科学中常用图之一,前面我们学习了使用plt.plot/ax.plot画线形图的方法。同样的,现在用这些函数来画散点图:

 
 
  1. x = np.linspace(0, 10, 30)
  2. y = np.sin(x)
  3. plt.plot(x, y, 'o', color='black')

函数的第三个参数是一个字符,表示图形符号的类型。与我们之前用---设置线条属性类似,对应的图形标记也有缩写形式。

 
 
  1. rng = np.random.RandomState(0)
  2. for marker in ['o', '.', ',', 'x', '+', 'v', '^', '<', '>', 's', 'd']:
  3. plt.plot(rng.rand(5), rng.rand(5), marker,label="marker='{0}'".format(marker))
  4. plt.legend(numpoints=1)
  5. plt.xlim(0, 1.8);
  6. plt.savefig("T1.png")
  7. plt.show()

常用标记如下:

取值 含义
. point marker
, pixel marker
o circle marker
v triangle_down marker
^ triangle_up marker
< triangle_left marker
> triangle_right marker
1 tri_down marker
2 tri_up marker
3 tri_left marker
4 tri_right marker
s square marker
p pentagon marker
* star marker
h hexagon1 marker
H hexagon2 marker
+ plus marker
x x marker
D diamond marker
d thin_diamond marker
&#124; vline marker
_ hline marker

plt.plot函数非常灵活,可以满足各种不同的可视化配置需求。关于具体配置的完整描述,由于篇幅有限,请参考plt.plot文档,这里就不多介绍了,大家多多尝试就好。

scatter画散点图

另一个可以创建散点图的函数是plt.scatter。它的功能非常强大,其用法与plt.plot函数类似:

 
 
  1. x = np.linspace(0, 10, 30)
  2. y = np.sin(x)
  3. plt.scatter(x, y, marker='o');

结果和前面plt.plot画的一样。plt.scatterplt.plot的主要差别在于,前者在创建散点图时具有更高的灵活性,可以单独控制每个散点与数据匹配,也可以让每个散点具有不同的属性(大小、颜色等)。

接下来画一个随机散点图,里面有各种颜色和大小的散点。为了能更好的显示重叠部分,用alpha参数来调整透明度:

 
 
  1. rng = np.random.RandomState(0)
  2. x = rng.randn(100)
  3. y = rng.randn(100)
  4. colors = rng.rand(100)
  5. sizes = 1000 * rng.rand(100)
  6. plt.scatter(x, y, c=colors, s=sizes, alpha=0.3,
  7. cmap='viridis')
  8. plt.colorbar() # 显示颜色条

这里散点的大小以像素为单位。颜色为浮点数,自动映射成颜色条(color scale,通过colorbar()显示)。当取值为浮点数时,它所对应的颜色则是对应的colormap上对应长度的取值,colormap就像以下这样的条带:

这样,散点的颜色与大小就可以在可视化图中显示多维数据的信息了。例如,可以使用sklearn程序库中的鸢尾花数据来演示。它里面有三种花,每个样本是一种花,其花瓣与花萼的长度与宽度都经过了测量:

 
 
  1. from sklearn.datasets import load_iris
  2. iris = load_iris()
  3. features = iris.data.T#加载数据
  4. plt.scatter(features[0], features[1], alpha=0.2,
  5. s=100*features[3], c=iris.target, cmap='viridis')
  6. plt.xlabel(iris.feature_names[0])
  7. plt.ylabel(iris.feature_names[1]);

散点图可以让我们同时看到不同维度的数据:每个点的坐标值(x, y)分别表示花萼的长度和宽度,而点的大小表示花瓣的宽度,三种颜色对应三种不同类型的鸢尾花。

这类多颜色与多特征的散点图在探索与演示数据时非常有用。

plot与scatter效率对比

plotscatter除了特征上的差异之外,在数据量较大时,plot的效率将大大高于scatter

这时由于scatter会对每个散点进行单独的大小与颜色的渲染,因此渲染器会消耗更多的资源。而在plot中,散点基本都彼此复制,因此整个数据集中的所有点的颜色、大小只需要配置一次。所以面对大型数据集时,plot方法比scatter方法好。

编程要求

在右侧编辑器补充代码,根据输入的三组数据绘制三组不同参数的散点图,具体要求如下:

  • 第一组数据参数设置标记大小为area,透明度为0.5

  • 第二组数据参数设置标记大小为area,标记颜色为绿色,透明度为0.6

  • 第三组数据参数设置标记大小为area,标记颜色为area,标记样式为v,透明度为0.7

  • 图形的figsize(10, 10)

  • 图形保存到Task3/img/T1.png

测试说明

平台会对你编写的代码进行测试,因此请按照以下要求可视化:

预期输出:你的答案与正确答案一致

import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
plt.style.use('seaborn-whitegrid')
import numpy as np

def student(x,y,x2,y2,x3,y3,area):
    '''
    根据输入的三组数据绘制三组不同参数的散点图
    :param x,y: 第一组数据,类型为array
    :param x2,y2: 第二组数据,类型为array
    :param x3,y3: 第三组数据,类型为array
    :param area: 标记大小参数的值,类型为array
    :return: None
    '''
    # ********* Begin *********#
    plt.figure(figsize=(10, 10))

    # 绘制第一组散点图
    plt.scatter(x, y, s=area, alpha=0.5)

    # 绘制第二组散点图
    plt.scatter(x2, y2, s=area, c='green', alpha=0.6 )

    # 绘制第三组散点图
    plt.scatter(x3, y3, s=area, marker='v', alpha=0.7,)

    # 设置图例
   

    # 保存图形
    save_dir = 'Task3/img/'
    plt.savefig(f'{save_dir}T1.png')
    plt.close()
    # ********* End *********#

猜你喜欢

转载自blog.csdn.net/Joy19981127/article/details/134804427