matplotlib给子图ax添加图例
时间: 2023-09-08 08:01:27 浏览: 484
在使用matplotlib给子图(ax)添加图例时,可以通过以下几个步骤完成:
1. 首先,确保在创建子图(ax)对象时,为每个子图设置一个标签(label)。这可以通过在绘制子图时传递一个label参数来完成。
2. 然后,在每个子图的plot函数中调用legend方法,将创建一个图例。可以通过plt.legend()函数调用,将默认的图例放置在最佳位置上,或者通过传递一些参数来进一步控制图例的位置和样式。
3. 如果希望在图例中显示特定的标签和样式,可以使用handles参数来指定要在图例中显示的对象以及相应的标签。
下面是一个简单的代码示例:
```
import matplotlib.pyplot as plt
# 创建一个包含两个子图的画布
fig, (ax1, ax2) = plt.subplots(2)
# 在第一个子图中绘制数据并设置标签
ax1.plot([1, 2, 3], [4, 5, 6], label='Line 1')
# 在第二个子图中绘制数据并设置标签
ax2.scatter([1, 2, 3], [4, 5, 6], label='Points')
# 在每个子图中添加图例
ax1.legend()
ax2.legend()
# 显示图形
plt.show()
```
在这个例子中,我们创建了一个包含两个子图的画布。在每个子图中,我们都给绘制的数据设置了一个标签。然后,通过调用legend方法在每个子图上创建图例。最后,我们使用plt.show()函数显示图形,并看到子图中的数据和相应的图例。
相关问题
各区二手房数量和均价析,根据以下要求进行分析 (1)导入“最新发布的北京二手房数据_预处理.xlsx”文件中的数据,并设置中文字体。 (2)创建新画布,设置大小为(12, 6)。 (3)将数据按所在区分组,并使用size()函数获取每个分组的统计个数;然后,创建一行一列的子图ax1,以统计个数的行标签为x轴数据、数值为y轴数据、颜色为(0.894, 0, 0.498)绘制柱状图,并设置y轴标题、图例和图表标题。 (4)将数据按所在区分组,并将分组数据的单价列按均值聚合,然后使用twinx()函数创建一个共享x轴的子图ax2,以均值为y轴数据、蓝色点画线星号为线条样式绘制折线图,并设置y轴标题、图例和每个数据的文本标签。
很抱歉,作为 AI,我没有本地环境来处理数据。但是我可以给你提供一些思路,希望对你有帮助。
首先,你需要使用 Pandas 库来导入数据,并设置中文字体。代码如下:
```python
import pandas as pd
from matplotlib import font_manager
# 设置中文字体
font = font_manager.FontProperties(fname='./msyh.ttf')
# 导入数据
data = pd.read_excel('最新发布的北京二手房数据_预处理.xlsx')
```
其次,你需要创建一个大小为(12, 6)的新画布,并将数据按所在区分组,并使用size()函数获取每个分组的统计个数。代码如下:
```python
import matplotlib.pyplot as plt
# 创建画布
fig = plt.figure(figsize=(12, 6))
# 按所在区分组并统计个数
grouped = data.groupby('区')['小区名称'].size()
```
接着,你需要创建一个子图ax1,并以统计个数的行标签为x轴数据、数值为y轴数据、颜色为(0.894, 0, 0.498)绘制柱状图,并设置y轴标题、图例和图表标题。代码如下:
```python
# 创建子图ax1
ax1 = fig.add_subplot(1, 1, 1)
# 绘制柱状图
ax1.bar(grouped.index, grouped.values, color=(0.894, 0, 0.498))
# 设置y轴标题
ax1.set_ylabel('数量', fontproperties=font)
# 设置图例
ax1.legend(['数量'], loc='upper left', prop=font)
# 设置图表标题
ax1.set_title('各区二手房数量', fontproperties=font)
```
最后,你需要将数据按所在区分组,并将分组数据的单价列按均值聚合,然后使用twinx()函数创建一个共享x轴的子图ax2,以均值为y轴数据、蓝色点画线星号为线条样式绘制折线图,并设置y轴标题、图例和每个数据的文本标签。代码如下:
```python
# 按所在区分组并计算单价均值
price_mean = data.groupby('区')['单价(元/平米)'].mean()
# 创建共享x轴的子图ax2
ax2 = ax1.twinx()
# 绘制折线图
ax2.plot(price_mean.index, price_mean.values, 'b-*')
# 设置y轴标题
ax2.set_ylabel('均价(元/平米)', fontproperties=font)
# 设置图例
ax2.legend(['均价'], loc='upper right', prop=font)
# 设置每个数据的文本标签
for a, b in zip(price_mean.index, price_mean.values):
ax2.text(a, b, '%.0f' % b, ha='center', va='bottom', fontsize=10, fontproperties=font)
```
这样,你就可以得到各区二手房数量和均价的柱状图和折线图了。
python子图加图例
在Python的Matplotlib库中,创建子图并添加图例是非常常见的操作。首先,你需要创建一个主图形(figure)并定义多个子图(subplot),然后为每个子图添加不同的数据和图例。这里是一个简单的步骤示例:
```python
import matplotlib.pyplot as plt
# 创建主图形
fig = plt.figure()
# 定义子图
ax1 = fig.add_subplot(2, 1, 1) # 第一行为2行,第一个位置,共2列的第一个
ax2 = fig.add_subplot(2, 1, 2) # 同理,第二个位置
# 在子图ax1上绘制数据并添加图例
x = [1, 2, 3, 4]
y1 = [10, 20, 30, 40]
y2 = [50, 60, 70, 80]
ax1.plot(x, y1, 'r', label='Data 1') # 红色线,标签为'Data 1'
ax1.plot(x, y2, 'g', label='Data 2') # 绿色线,标签为'Data 2'
ax1.legend() # 添加图例到子图1
# 在子图ax2上绘制不同数据
z1 = [15, 25, 35, 45]
z2 = [45, 55, 65, 75]
ax2.plot(x, z1, 'b', dashes=[2, 2], label='Dashed Data') # 蓝色虚线,标签为'Dashed Data'
ax2.plot(x, z2, 'm', marker='o', label='Marker Data') # 蓝色实心圆点,标签为'Marker Data'
ax2.legend()
# 显示图形
plt.show()
阅读全文