如何设置Pandas绘图中Matplotlib图例的位置

如何设置Pandas绘图中Matplotlib图例的位置

阅读更多:Matplotlib 教程

背景介绍

Pandas是十分流行的Python库,它提供了许多数据分析和处理的工具。同时,Pandas内置了Matplotlib,使用户可以快速轻松地进行数据可视化。在绘制图表时,Matplotlib图例可以很好地说明数据的含义。然而,Matplotlib在绘制图例时,有时会不准确或不易于阅读。因此本文就如何设置Matplotlib图例的位置进行详细介绍。

Matplotlib图例

在绘制图表时,为了使读者易于理解,通常需要使用图例。Matplotlib的图例(legend)可以显示图表中数据的含义,如不同线条或标记的颜色、形状、大小等。Matplotlib图例的位置决定在图表中显示的位置。Matplotlib提供了一些预设的位置,也可以通过设置自定义位置。下面是Matplotlib预设的位置:

  • “best”: 自动选取最佳位置来显示图例。这是默认选项,通常很好用。
  • “upper right”: 在右上角显示。
  • “upper left”: 在左上角显示。
  • “lower left”: 在左下角显示。
  • “lower right”: 在右下角显示。
  • “right”: 在图表的右侧显示。
  • “center left”: 在左侧的中间位置显示。
  • “center right”: 在右侧的中间位置显示。
  • “lower center”: 在下方的中间位置显示。
  • “upper center”: 在上方的中间位置显示。
  • “center”: 在图表的中间位置显示。

下面是如何设置Matplotlib图例的位置。

设置Matplotlib图例的位置

通常,在绘制图表时,可以通过调用legend()函数来添加图例,如下所示:

import pandas as pd
import matplotlib.pyplot as plt

data = {"name": ["Alice", "Bob", "Charlie", "David"],
        "score": [80, 67, 90, 81]}

df = pd.DataFrame(data)
ax = df.plot.bar(x="name", y="score", legend=True, title="Student's Score")
plt.show()

这里我们使用pandas.DataFrame.plot()函数绘制柱状图,并通过legend=True参数添加Matplotlib图例,位置默认为“最佳”。

我们也可以设置Matplotlib图例的位置。在plot()函数中,可以使用legend()函数并传入loc参数,该参数表示所要设置的位置。例如,将Matplotlib图例设置为右上角,可将代码修改如下所示:

import pandas as pd
import matplotlib.pyplot as plt

data = {"name": ["Alice", "Bob", "Charlie", "David"],
        "score": [80, 67, 90, 81]}

df = pd.DataFrame(data)
ax = df.plot.bar(x="name", y="score", legend=True, title="Student's Score")
ax.legend(loc="upper right")
plt.show()

同样的,我们也可以将Matplotlib图例设置到其他位置,例如左下角、右下角、左侧中间等。下面是具体的设置方法。

左下角

ax.legend(loc="lower left")

右下角

ax.legend(loc="lower right")

左上角

ax.legend(loc="upper left")

中上

ax.legend(loc="upper center")

右上角

ax.legend(loc="upper right")

左侧中间

ax.legend(loc="center left")

右侧中间

ax.legend(loc="center right")

中下

ax.legend(loc="lower center")

中间

ax.legend(loc="center")

自定义位置

如果上述位置无法满足需求,也可以通过自定义位置来实现更精确的设置。Matplotlib中可以使用两种方式来自定义位置:

  • 使用bbox_to_anchor参数:该参数可以指定图例的外边界框位置和大小。
  • 使用loc参数和bbox_transform参数联合使用:其中,loc参数和上文一样用来指定所选的预设位置,bbox_transform则指定了框架的坐标系。

下面是具体的设置方法。

使用bbox_to_anchor参数

首先,需要使用ax.get_position()函数获取图表的位置。该位置是一个四元组,包含左、右、下、上四个边界的位置。接下来可以通过bbox_to_anchor参数来指定图例与边界框之间的位置关系。该参数可以传入一个二元组,第一个元素表示x轴偏移量,第二个元素表示y轴偏移量。例如,要将图例放在图表右侧,可以将Matplotlib图例设置为:

ax.legend(loc="center left", bbox_to_anchor=(1, 0.5))

这里将图例位置设定为“左中”,并通过bbox_to_anchor参数指定图例与边界框之间的偏移量。图例在右侧,而且与边界框之间的距离比默认设置更远

使用loc参数和bbox_transform参数联合使用

如果需要更加准确地控制图例与边界框之间的位置关系,可以使用loc参数和bbox_transform参数联合使用。其中,loc参数和上面一样用来指定所选的预设位置,bbox_transform则指定了框架的坐标系。

首先,需要通过fig = plt.figure(figsize=(w, h)设置图表大小,然后使用fig.add_subplot(111)函数添加一个子图。然后,可以使用ax.get_position()函数获取子图位置,并在legend()函数中通过bbox_transform参数进行传递。例如,要将图例放在图表的左侧,可以将Matplotlib图例设置为:

fig = plt.figure(figsize=(6, 4))
ax = fig.add_subplot(111)
data = {"name": ["Alice", "Bob", "Charlie", "David"],
        "score": [80, 67, 90, 81]}

df = pd.DataFrame(data)
ax = df.plot.bar(x="name", y="score", legend=True, title="Student's Score")

ax.legend(loc="center left", bbox_transform=ax.transAxes)
plt.show()

这里将Matplotlib图例位置设置为“左中”,并通过bbox_transform=ax.transAxes参数指定框架的坐标系。

总结

在Pandas数据可视化中,Matplotlib图例是用于解释数据含义的重要工具。通过本文,可以了解到如何设置Matplotlib图例的位置,包括使用预设位置和自定义位置。在实际应用中,根据图表的需求可以选择相应的位置,或自定义精确的位置。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程