如何设置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图例的位置,包括使用预设位置和自定义位置。在实际应用中,根据图表的需求可以选择相应的位置,或自定义精确的位置。