Matplotlib基础-图例

Matplotlib 中的图例是帮助观察者理解图像数据的重要工具。

图例通常包含在图像中,用于解释不同的颜色、形状、标签和其他元素。

1. 主要参数

当不设置图例的参数时,默认的图例是这样的。

python 复制代码
import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)

fig = plt.figure()
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8])
ax.plot(x, y1, label="sin")
ax.plot(x, y2, label="cos")
ax.legend()

图例就是右上角的那个部分。

图例的主要参数,其实也就是上例 ax.lengend() 函数的主要参数:

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

2. 配置示例

通过示例来演示常用的设置。

2.1. 图例位置

python 复制代码
fig, ax = plt.subplots(3, 3)
fig.set_size_inches(10, 10)

locations = [
    ["lower left", "lower center", "lower right"],
    ["center left", "center", "center right"],
    ["upper left", "upper center", "upper right"],
]
for i in range(3):
    for j in range(3):
        ax[i, j].plot(x, y1, label="sin")
        ax[i, j].plot(x, y2, label="cos")
        ax[i, j].legend(loc=locations[i][j])

上面的示例显示了不同位置的图例。

2.2. 图例边框

边框可以设置边框的背景色,边框颜色和是否有阴影。

python 复制代码
fig = plt.figure()
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8])
ax.plot(x, y1, label="sin")
ax.plot(x, y2, label="cos")
ax.legend(facecolor="lightblue", edgecolor="red", shadow=True)

上例中,背景色 lightblue,边框 red,阴影设置为 True

设置无边框比较简单,frameon=False 即可。

python 复制代码
fig = plt.figure()
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8])
ax.plot(x, y1, label="sin")
ax.plot(x, y2, label="cos")
ax.legend(frameon=False)

2.3. 图例分列

图例默认都是一列多行 的格式,比如上面的的各个示例,图例都是依次竖着排列下来的。

可以通过 ncol 属性,让图例横着排列。

python 复制代码
fig = plt.figure()
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8])
ax.plot(x, y1, label="sin")
ax.plot(x, y2, label="cos")
ax.legend(frameon=False, loc="upper center", ncol=2)

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

2.4. 多个图例

一般的图形都只有一个图例,比如上面的都是这样的,sincos都在一个图例中。

如果图例太多,或者多个图例之间关系不大,也可以创建多个图例。

python 复制代码
from matplotlib.legend import Legend

x = np.linspace(0, 10, 100)
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.sin(x + 1)
y4 = np.cos(x + 1)

fig = plt.figure()
ax = fig.add_axes([0.1, 0.1, 0.8, 0.8])
legends = []
legends += ax.plot(x, y1, label="sin1")
legends += ax.plot(x, y2, label="cos1")
legends += ax.plot(x, y3, label="sin2")
legends += ax.plot(x, y4, label="cos2")
ax.legend(legends[:2], ["sin1", "cos1"], loc="upper right")

leg = Legend(ax, legends[2:], ["sin2", "cos2"], loc="lower left")
ax.add_artist(leg)

上面的示例中的4个曲线,分成了2个图例来说明。

一个图例在右上角,一个图例在左下角。

2.5. 图例中不同大小的点

最后,介绍一种更复杂的图例显示方式。

首先生成主要几个省市的人口散点图(数据是网络上搜索的),

生成图例的时候,给3个主要的节点500万人,5000万人,1亿人设置的点的大小比例与图中的各个散点数据保持一致。

python 复制代码
x = ["广东", "山东", "江苏", 
     "湖北", "浙江", "吉林", 
     "甘肃", "宁夏", "青海", "西藏"]
y = np.array([10432, 9578, 7866, 
              5723, 5442, 2745,
              2557, 630, 562, 300])

fig = plt.figure(figsize=[10, 8])
plt.scatter(x, y, c=np.log10(y), s=y/16)

#创建图例
for population in [500, 5000, 10000]:
    plt.scatter([],[], c='b', 
                s=population/16, 
                alpha=0.3, 
                label=str(population)+" (万人)")

plt.legend(scatterpoints=1, 
           labelspacing=1.5, 
           title="人口图例",
           frameon=False)

3. 总结

图例可以设置成各式各样,本篇介绍的图例设置方式并不是仅仅为了美观,

更重要的是利用这些设置方式帮助用户能够达成以下目的:

  1. 帮助观察者快速了解图像数据:图例提供了关于图像数据的简洁、易于理解的解释,使得观察者能够快速了解图像的主题和内容。
  2. 帮助观察者更好地理解图像细节:在一些复杂的图像中,观察者可能需要花费很多时间才能理解其中的细节。图例可以提供关于图像细节的额外信息,使得观察者能够更好地理解图像。
  3. 帮助观察者发现图像中的异常或者重要信息:图例可以用于指出图像中的异常或者重要信息,帮助观察者更好地理解和分析图像。
相关推荐
IT学长编程2 小时前
计算机毕业设计 基于深度学习的酒店评论文本情感分析研究 Python毕业设计项目 Hadoop毕业设计选题 机器学习选题【附源码+文档报告+安装调试】
hadoop·python·深度学习·机器学习·数据分析·毕业设计·酒店评论文本情感分析
HaiLang_IT5 小时前
数据分析毕业论文题目推荐:精选选题清单
大数据·数据分析·毕业设计
德育处主任5 小时前
p5.js 绘制 3D 椭球体 ellipsoid
前端·javascript·数据可视化
人大博士的交易之路8 小时前
今日行情明日机会——20250912
大数据·数据挖掘·数据分析·缠论·缠中说禅·涨停回马枪·道琼斯结构
麦麦大数据16 小时前
J002 Vue+SpringBoot电影推荐可视化系统|双协同过滤推荐算法评论情感分析spark数据分析|配套文档1.34万字
vue.js·spring boot·数据分析·spark·可视化·推荐算法
CC数分1 天前
零基础3个月上岸[特殊字符]自学数据分析路线
学习·数据挖掘·数据分析·大学生·考证
折翼的恶魔1 天前
数据分析:合并
python·数据分析·pandas
IT毕设梦工厂1 天前
大数据毕业设计选题推荐-基于大数据的国家医用消耗选品采集数据可视化分析系统-Hadoop-Spark-数据可视化-BigData
大数据·hadoop·信息可视化·spark·毕业设计·数据可视化·bigdata
华略创新1 天前
利用数据分析提升管理决策水平
大数据·数据分析·crm·管理系统·软件
TomatoSCI1 天前
量化冗余分析中变量的关系丨TomatoSCI分析日记
数据分析·tomatosci·冗余分析