使用Seaborn Objects API绘图时图例遮挡数据的解决方法咨询
解决Seaborn Objects API图例遮挡数据的规避方案
方案1:将图例移至图表外部右侧
利用Seaborn Objects的.legend()方法,通过bbox_to_anchor参数将图例定位到图表区域外,同时调整布局避免图例被截断:
import seaborn.objects as so import numpy as np import pandas as pd import matplotlib.pyplot as plt res_df = pd.DataFrame( {'value': np.random.rand(20), 'cfg__status_during_transmit': ['OK']*5 + ['ERR']*5 + ['WARN']*5 + ['OTH']*5} ) plot = ( so.Plot(res_df, y='value', x='cfg__status_during_transmit', color='cfg__status_during_transmit') .add(so.Dots(), so.Jitter(width=0.5)) .layout(size=(8, 4)) .legend(loc="upper right", bbox_to_anchor=(1.2, 1)) # 把图例移到右侧外部 ) # 获取matplotlib轴对象,调整子图边距 ax = plot.on(plt.gca()).plot() plt.subplots_adjust(right=0.8) # 留出右侧空间容纳图例 plt.show()
方案2:将图例移至图表底部横向排列
把图例放在图表下方横向分布,既不遮挡数据,也能保持图表紧凑:
import seaborn.objects as so import numpy as np import pandas as pd import matplotlib.pyplot as plt res_df = pd.DataFrame( {'value': np.random.rand(20), 'cfg__status_during_transmit': ['OK']*5 + ['ERR']*5 + ['WARN']*5 + ['OTH']*5} ) plot = ( so.Plot(res_df, y='value', x='cfg__status_during_transmit', color='cfg__status_during_transmit') .add(so.Dots(), so.Jitter(width=0.5)) .layout(size=(8, 4)) .legend(loc="lower center", bbox_to_anchor=(0.5, -0.2), ncol=4) # 底部横向排列图例项 ) # 调整底部边距容纳图例 ax = plot.on(plt.gca()).plot() plt.subplots_adjust(bottom=0.2) plt.show()
方案3:手动精细调整图例位置
直接获取matplotlib的图例对象,自定义位置和布局参数,实现更灵活的控制:
import seaborn.objects as so import numpy as np import pandas as pd import matplotlib.pyplot as plt res_df = pd.DataFrame( {'value': np.random.rand(20), 'cfg__status_during_transmit': ['OK']*5 + ['ERR']*5 + ['WARN']*5 + ['OTH']*5} ) # 创建matplotlib画布和轴 fig, ax = plt.subplots(figsize=(8, 4)) plot = ( so.Plot(res_df, y='value', x='cfg__status_during_transmit', color='cfg__status_during_transmit') .add(so.Dots(), so.Jitter(width=0.5)) .on(ax) .plot() ) # 获取图例并调整位置 legend = ax.get_legend() legend.set_bbox_to_anchor((1.05, 1)) # 向右上方偏移至图表外 legend.set_loc("upper left") # 调整子图布局避免图例被截断 fig.subplots_adjust(right=0.8) plt.show()
内容的提问来源于stack exchange,提问作者MuhammedYunus
相关产品推荐
相关产品推荐

