matplotlib/seaborn绘图时legend的markerscale参数不生效问题
问题根因
markerscale参数仅对图例中的*数据标记(marker)*生效,你当前的sns.lineplot代码未指定marker参数,绘图生成的图例项只有折线、没有任何标记符号,所以该参数不会产生可见效果。- 你在调用
g.legend()之前已经对默认生成的图例做了文字样式配置,调用g.legend()方法会重新生成全新图例,若未同步传递样式参数会覆盖之前的配置。
修复方案
方案1:需要缩放图例中的标记大小
首先给sns.lineplot添加marker参数,再配置markerscale即可生效:
# lineplot 新增marker、markersize参数,可根据需求调整标记样式和原始大小 g= sns.lineplot(x='Plate format' , y='Spots/Area_Normalized', data=df_Sample, hue='Compounds2_Normalized', palette=color_map, estimator=None, ci=None, sort=False, linewidth=15, marker='o', markersize=20) # 生成图例时同步传递markerscale和文字样式参数,无需再单独设置图例文字大小 g.legend(markerscale=10, prop={'size':100}, title_fontsize=100)
方案2:不需要标记,仅调整图例中折线的显示大小
如果不需要展示数据标记,想放大图例里的折线长度/宽度,使用handlelength(控制折线长度)、handleheight(控制高度)参数即可:
g.legend(handlelength=8, handleheight=3, prop={'size':100}, title_fontsize=100)
补充说明
如果需要通过修改rc参数/rcParams配置生效,需要将配置代码放在所有绘图代码的最开头,在创建画布、调用seaborn绘图函数之前设置才会作用于后续生成的图表元素,绘图完成后再修改配置不会生效。
内容的提问来源于stack exchange,提问作者Ardalan1
相关产品推荐
相关产品推荐

