翼度科技»论坛 编程开发 python 查看内容

【matplotlib基础】--图例

5

主题

5

帖子

15

积分

新手上路

Rank: 1

积分
15
Matplotlib 中的图例是帮助观察者理解图像数据的重要工具。
图例通常包含在图像中,用于解释不同的颜色、形状、标签和其他元素。
1. 主要参数

当不设置图例的参数时,默认的图例是这样的。
  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. x = np.linspace(0, 10, 100)
  4. y1 = np.sin(x)
  5. y2 = np.cos(x)
  6. fig = plt.figure()
  7. ax = fig.add_axes([0.1, 0.1, 0.8, 0.8])
  8. ax.plot(x, y1, label="sin")
  9. ax.plot(x, y2, label="cos")
  10. ax.legend()
复制代码

图例就是右上角的那个部分。
图例的主要参数,其实也就是上例 ax.lengend() 函数的主要参数:

  • 图例位置相关:loc (位置字符串)
  • 边框相关:facecolor(背景色),edgecolor(边框颜色),shadow(是否设置阴影)framemon(是否有边框和背景)
  • 图例的列数:默认是1列多行的格式,ncol(列的个数)
2. 配置示例

通过示例来演示常用的设置。
2.1. 图例位置
  1. fig, ax = plt.subplots(3, 3)
  2. fig.set_size_inches(10, 10)
  3. locations = [
  4.     ["lower left", "lower center", "lower right"],
  5.     ["center left", "center", "center right"],
  6.     ["upper left", "upper center", "upper right"],
  7. ]
  8. for i in range(3):
  9.     for j in range(3):
  10.         ax[i, j].plot(x, y1, label="sin")
  11.         ax[i, j].plot(x, y2, label="cos")
  12.         ax[i, j].legend(loc=locations[i][j])
复制代码

上面的示例显示了不同位置的图例。
2.2. 图例边框

边框可以设置边框的背景色,边框颜色和是否有阴影。
  1. fig = plt.figure()
  2. ax = fig.add_axes([0.1, 0.1, 0.8, 0.8])
  3. ax.plot(x, y1, label="sin")
  4. ax.plot(x, y2, label="cos")
  5. ax.legend(facecolor="lightblue", edgecolor="red", shadow=True)
复制代码

上例中,背景色 lightblue,边框 red,阴影设置为 True。
设置无边框比较简单,frameon=False 即可。
  1. fig = plt.figure()
  2. ax = fig.add_axes([0.1, 0.1, 0.8, 0.8])
  3. ax.plot(x, y1, label="sin")
  4. ax.plot(x, y2, label="cos")
  5. ax.legend(frameon=False)
复制代码

2.3. 图例分列

图例默认都是一列多行的格式,比如上面的的各个示例,图例都是依次竖着排列下来的。
可以通过 ncol 属性,让图例横着排列。
  1. fig = plt.figure()
  2. ax = fig.add_axes([0.1, 0.1, 0.8, 0.8])
  3. ax.plot(x, y1, label="sin")
  4. ax.plot(x, y2, label="cos")
  5. ax.legend(frameon=False, loc="upper center", ncol=2)
复制代码

上面的示例,图例(legend)设置为两列,位于上方中间位置。
2.4. 多个图例

一般的图形都只有一个图例,比如上面的都是这样的,sin和cos都在一个图例中。
如果图例太多,或者多个图例之间关系不大,也可以创建多个图例。
  1. from matplotlib.legend import Legend
  2. x = np.linspace(0, 10, 100)
  3. y1 = np.sin(x)
  4. y2 = np.cos(x)
  5. y3 = np.sin(x + 1)
  6. y4 = np.cos(x + 1)
  7. fig = plt.figure()
  8. ax = fig.add_axes([0.1, 0.1, 0.8, 0.8])
  9. legends = []
  10. legends += ax.plot(x, y1, label="sin1")
  11. legends += ax.plot(x, y2, label="cos1")
  12. legends += ax.plot(x, y3, label="sin2")
  13. legends += ax.plot(x, y4, label="cos2")
  14. ax.legend(legends[:2], ["sin1", "cos1"], loc="upper right")
  15. leg = Legend(ax, legends[2:], ["sin2", "cos2"], loc="lower left")
  16. ax.add_artist(leg)
复制代码

上面的示例中的4个曲线,分成了2个图例来说明。
一个图例在右上角,一个图例在左下角。
2.5. 图例中不同大小的点

最后,介绍一种更复杂的图例显示方式。
首先生成主要几个省市的人口散点图(数据是网络上搜索的),
生成图例的时候,给3个主要的节点500万人,5000万人,1亿人设置的点的大小比例与图中的各个散点数据保持一致。
  1. x = ["广东", "山东", "江苏",
  2.      "湖北", "浙江", "吉林",
  3.      "甘肃", "宁夏", "青海", "西藏"]
  4. y = np.array([10432, 9578, 7866,
  5.               5723, 5442, 2745,
  6.               2557, 630, 562, 300])
  7. fig = plt.figure(figsize=[10, 8])
  8. plt.scatter(x, y, c=np.log10(y), s=y/16)
  9. #创建图例
  10. for population in [500, 5000, 10000]:
  11.     plt.scatter([],[], c='b',
  12.                 s=population/16,
  13.                 alpha=0.3,
  14.                 label=str(population)+" (万人)")
  15. plt.legend(scatterpoints=1,
  16.            labelspacing=1.5,
  17.            title="人口图例",
  18.            frameon=False)
复制代码

3. 总结

图例可以设置成各式各样,本篇介绍的图例设置方式并不是仅仅为了美观,
更重要的是利用这些设置方式帮助用户能够达成以下目的:

  • 帮助观察者快速了解图像数据:图例提供了关于图像数据的简洁、易于理解的解释,使得观察者能够快速了解图像的主题和内容。
  • 帮助观察者更好地理解图像细节:在一些复杂的图像中,观察者可能需要花费很多时间才能理解其中的细节。图例可以提供关于图像细节的额外信息,使得观察者能够更好地理解图像。
  • 帮助观察者发现图像中的异常或者重要信息:图例可以用于指出图像中的异常或者重要信息,帮助观察者更好地理解和分析图像。

来源:https://www.cnblogs.com/wang_yb/p/17684501.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具