Matplotlib图例重复显示求助:循环调用sns.histplot致图例重复
解决Seaborn histplot循环绘图时图例重复的问题
使用Matplotlib和Seaborn读取CSV数据绘图时,通过for循环调用sns.histplot()绘制多列数据的直方图,出现了每个列的图例显示两次的问题。原代码如下:
import pandas as pd import matplotlib.pyplot as plt import seaborn as sns import numpy as np import matplotlib sns.set_style('darkgrid') df = pd.read_csv('dm_office_sales.csv') df['salary'] = df['salary'] * 3 df['sample salary'] = df['salary'] * 2 x = df['salary'] y = df['sales'] z = df['sample salary'] fig,ax = plt.subplots() for i in [x,y,z]: sns.histplot(data = i, bins=50, ax=ax, palette = 'bright',alpha=0.3, label='{}'.format(i.name)) plt.legend(numpoints=1) plt.suptitle('Sales/Salary Histogram') plt.show()
问题原因
当传入的data是Pandas Series(即单独的列数据)时,sns.histplot()会自动基于Series的名称生成一个图例条目,同时手动设置的label参数又会添加一次相同的图例,最终导致重复显示。
解决方案
有两种简单的修复方式:
方法1:禁用histplot自动生成图例
在调用sns.histplot()时添加legend=False参数,只保留手动设置的label:
import pandas as pd import matplotlib.pyplot as plt import seaborn as sns import numpy as np import matplotlib sns.set_style('darkgrid') df = pd.read_csv('dm_office_sales.csv') df['salary'] = df['salary'] * 3 df['sample salary'] = df['salary'] * 2 x = df['salary'] y = df['sales'] z = df['sample salary'] fig,ax = plt.subplots() for i in [x,y,z]: # 添加legend=False,关闭自动图例 sns.histplot(data = i, bins=50, ax=ax, palette = 'bright',alpha=0.3, label='{}'.format(i.name), legend=False) plt.legend(numpoints=1) plt.suptitle('Sales/Salary Histogram') plt.show()
方法2:直接传入DataFrame和列名(更规范的方式)
循环列名而非单独的Series,通过x参数指定列名,这样histplot只会生成一次对应列名的图例:
import pandas as pd import matplotlib.pyplot as plt import seaborn as sns import numpy as np import matplotlib sns.set_style('darkgrid') df = pd.read_csv('dm_office_sales.csv') df['salary'] = df['salary'] * 3 df['sample salary'] = df['salary'] * 2 fig,ax = plt.subplots() # 循环目标列名 for col in ['salary', 'sales', 'sample salary']: sns.histplot(data=df, x=col, bins=50, ax=ax, palette='bright', alpha=0.3, label=col) plt.legend(numpoints=1) plt.suptitle('Sales/Salary Histogram') plt.show()
内容的提问来源于stack exchange,提问作者Raaghav Rammohan
相关产品推荐
相关产品推荐

