【问题标题】:Add legend in overlapped Seaborn graph在重叠的 Seaborn 图中添加图例
【发布时间】:2021-01-25 07:18:15
【问题描述】:

我想为条形字符和线条添加图例作为监控和模拟数据。谁能帮助我?以及如何将线做成虚线?

fig,ax =plt.subplots(figsize=(12,8))
sns.barplot(ax=ax,x='Month',y='Fans',data= df2[df2['Type']=='Actual'], color = 'steelblue')
sns.lineplot(ax = ax,x= 'Month',y='Fans',data = df2[df2['Type']=='Simulated'], marker='o', sort = False,
             color= 'darkorange',linewidth=6,dash_capstyle='round')
ax.set_ylabel('kWh',size=15)
ax.set(xlabel=None)
sns.despine()

【问题讨论】:

  • 当你尝试时会发生什么:ax.legend()?
  • 它说:'没有找到带有标签的句柄'
  • 我会搞砸这个,但你的例子不能在我的系统上运行。 df2 未定义

标签: matplotlib seaborn


【解决方案1】:

在 matplotlib 中获取图例的标准方法是在相关函数中添加 label= 参数。这也适用于许多 seaborn 功能。在这种情况下,Seaborn 甚至会自动创建图例。 (对于某些函数,标签需要位于特定的 kw 字典中。)

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns

df2 = pd.DataFrame({'Month': ['January', 'February', 'March', 'April', 'May', 'June', 'July',
                              'August', 'September', 'October', 'November', 'December'] * 2,
                    'Fans': np.random.randint(10, 100, 24),
                    'Type': ['Actual'] * 12 + ['Simulated'] * 12})
fig, ax = plt.subplots(figsize=(12, 8))
sns.barplot(ax=ax, x='Month', y='Fans', data=df2[df2['Type'] == 'Actual'], color='steelblue', label='Actual')
sns.lineplot(ax=ax, x='Month', y='Fans', data=df2[df2['Type'] == 'Simulated'], marker='o', sort=False,
             color='darkorange', linewidth=6, dash_capstyle='round', label='Simulated')
ax.set_ylabel('kWh', size=15)
ax.set(xlabel=None)
ax.margins(x=0.02) # less white space at the left and the right
sns.despine()
plt.show()

【讨论】:

    猜你喜欢
    • 2019-04-07
    • 2021-03-24
    • 2021-09-25
    • 2020-09-16
    • 2021-11-20
    • 2019-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多