论文绘图figure的图例位置调整

最近写论文,绘图时,由于图例遮挡了曲线图,十分影响阅读效果,开始尝试将图例的位置调整到曲线图的外部,借此文章记录调整方法。

我使用的是seaborn进行绘图,即在绘图之前需要引入seaborn包

import seaborn as sns

在存储数据时,我使用了dataframe,因此需要pandas包

import pandas as pd

我们先设定一个绘图的场景:一共有3个模型model1,model2, model3;设定一个参数α,可取值为两个α1和α2;指标(即纵轴)为每一个模型在每一个参数值下的性能(暂且记录为accuracy)。整理后的数据为:

Modelalphaaccuracy
model1α10.81
model1α20.83
model2α10.76
model2α20.72
model3α10.78
model3α20.79

 我们将这些数据存到dataframe中:

df = pd.DataFrame(columns = ['Model', 'Alpha', 'Accuracy'])
df = df.append({"Model": 'model1', "Alpha": 'alpha1', "Accuracy": 0.81}, ignore_index = True)
df = df.append({"Model": 'model1', "Alpha": 'alpha2', "Accuracy": 0.83}, ignore_index = True)
df = df.append({"Model": 'model2', "Alpha": 'alpha1', "Accuracy": 0.76}, ignore_index = True)
df = df.append({"Model": 'model2', "Alpha": 'alpha2', "Accuracy": 0.72}, ignore_index = True)
df = df.append({"Model": 'model3', "Alpha": 'alpha1', "Accuracy": 0.78}, ignore_index = True)
df = df.append({"Model": 'model3', "Alpha": 'alpha2', "Accuracy": 0.79}, ignore_index = True)

输出df,如下所示: 

我们希望绘制一个柱状图,展示出每一个模型在不同参属下的accuracy,如果只进行简单的操作:

ax = sns.barplot(x = "Model", y = "Accuracy", hue = "Alpha", data = df)

绘制出来的是下面这个样子:

可以很明显看出图例遮挡了绘制图像的主体部分,会影响阅读

因此我们需要对上述代码进行补充:【重点在于补充的第二行

ax = sns.barplot(x = "Model", y = "Accuracy", hue = "Alpha", data = df)
ax.legend(bbox_to_anchor=(0.75, -0.15), ncol=2)

然后就可以得到下面这样的图 :(图例已经到了下面,不再遮盖柱状图主体部分)

那么这几个参数是什么意思呢?

首先看一下ncol这个参数,这个参数是针对图例的,在上面这个小的测试实验中,图例有两个,ncol = 2就会让两个横向排列(即2列),如果设置ncol = 1,就会纵向排列,成为下面的样子:

 然后再看bbox_to_anchor这个参数,也就是调整图例位置的关键参数,我们首先将该参数置零看一下效果:

ax = sns.barplot(x = "Model", y = "Accuracy", hue = "Alpha", data = df)
ax.legend(bbox_to_anchor=(0, 0), ncol=2)

 

 可以看出,此时图例最右边的点,处于原点位置,此时如果改变bbox_to_anchor的值,就会相应向右,向上移动,如果想要移动到整个图的最下方中间位置(即向右,向下移动),我们就需要设置bbox_to_anchor = (0.75, -0.15)(当然,如果想要移动得到别的位置就可以自行调整)。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值