matplotlib绘图优化-散点图绘制图例

  • A+
所属分类:python数据分析
摘要这一篇介绍关于matplotlib散点图的绘制, 特别是如何给散点图加图例.

简介

在使用matplotlib绘制散点图的时候, 如果有不同的类别, 我们需要使用不同的颜色对类别进行标注, 同时需要有图例(legend)来说明每一种颜色和类别的对应.

但是直接使用plt.scatter把所有类别的点画在一起是不能标注的, 我们需要对每一类分别进行绘制.

参考资料

主要想法来源: matplotlib scatter plot with color label and legend specified by c option

 

简单实验

下面来看一个简单的实验, 说明如何进行绘制.

  1. import numpy as np
  2. from matplotlib import pyplot as plt

为了方便展示, 我们使用少量数据进行展示.

  1. scatter_x = np.array([1,2,3,4,5])
  2. scatter_y = np.array([5,4,3,2,1])
  3. group = np.array([1,3,2,1,3])
  4. cdict = {1: 'red', 2: 'blue', 3: 'green'}

最后绘制的时候, 每一个类别单独进行绘制, 同时可以指定需要的label是什么

  1. fig, ax = plt.subplots()
  2. for g in np.unique(group):
  3.     ix = np.where(group == g)
  4.     ax.scatter(scatter_x[ix], scatter_y[ix], c = cdict[g], label = g, s = 100)
  5. ax.legend()
  6. plt.show()

除了上面使用np.unique进行提取所有label的种类之外, 因为我们有index和label的对应关系, 即cdict, 我们可以直接使用这个. 注意看下面的for循环.

  1. for key in cdict.keys():
  2.     ix = np.where(group == key)
  3.     ax.scatter(scatter_x[ix], scatter_y[ix], c = cdict[key], label = key, s = 100)

 

关于散点图的颜色

到这里还有一个问题, 就是控制点的颜色. 上面我们的sdict里面存储的就是颜色, 所以可以在指定颜色的时候直接使用, 但是大部分时候里面不是颜色, 这个时候就需要使用将number和转换为颜色的功能.

  1. cmap = plt.get_cmap('rainbow', 12) # 数字与颜色的转换

上面的cmap里面输入一个数字, 可以将数字转换为RGB颜色. 下面是一个整体的代码, 注意其中color的指定的方式.

  1. cmap = plt.get_cmap('rainbow', 12) # 数字与颜色的转换
  2. scatter_x = np.array([1,2,3,4,5])
  3. scatter_y = np.array([5,4,3,2,1])
  4. group = np.array([1,3,2,1,3])
  5. cdict = {1: '111', 2: '222', 3: '333'}
  6. fig, ax = plt.subplots()
  7. for key in cdict.keys():
  8.     ix = np.where(group == key)
  9.     ax.scatter(scatter_x[ix], scatter_y[ix], color = cmap(key), label = key, s = 100) # 注意这里color的指定
  10. ax.legend()
  11. plt.show()

最终的结果如下所示:

matplotlib绘图优化-散点图绘制图例
  • 微信公众号
  • 关注微信公众号
  • weinxin
  • QQ群
  • 我们的QQ群号
  • weinxin
王 茂南

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: