微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

脚注/注释与 xlabel 重叠

如何解决脚注/注释与 xlabel 重叠

我的代码 请向下滚动到 ##### Part where the question is related #####

这是存储库的一部分:https://github.com/soobinck/rotarod_ML/featureImportance/featureImportance_decisionTreeImportancePlot.py

import os
import string

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from utils.getDirAbsPath import outputAbsPath

inputCSV = './output.csv'

# Plot importance when the number of intervals is 2.

interval = len(string.ascii_lowercase)
df = pd.read_csv(inputCSV,index_col=0)
df01 = df[['0','1']]

bins = np.array_split(df01,len(df01) / interval)[1]
df01 = pd.DataFrame(bins)

xlabel = '(i)th interval'
ylabel = 'feature importance'
title = 'Feature importance in classifying genotypes (%i iterations)' % interval
outputPath = os.path.join(outputAbsPath(),'featureImportance','accuracies.png')
footnote = footnote = 'Classified with mean step up height as the model\'s input. Classified with mean step up height as the model\'s input. Classified with mean step up height as the model\'s input. Classified with mean step up height as the model\'s input. Classified with mean step up height as the model\'s input. '


# Plotting

fig,ax = plt.subplots(figsize=(15,11),tight_layout=True)
plt.subplots_adjust(hspace=1.0,wspace=0.02,bottom=0.17)

# Creating axes instance
bp = ax.Boxplot(df,patch_artist=True,notch='True')

# changing color and linewidth of
# whiskers
for whisker in bp['whiskers']:
    whisker.set(color='#8B008B',linestyle=":")
# changing color and linewidth of
# caps
for cap in bp['caps']:
    cap.set(color='#8B008B')

# changing color and linewidth of
# medians
for median in bp['medians']:
    median.set(color='red')

# changing style of fliers
for flier in bp['fliers']:
    flier.set(marker='D',color='#e7298a',alpha=0.5)

# x-axis labels
ax.set_xlabel(xlabel)
ax.set_ylabel(ylabel)
# Adding title
plt.title(title)
fig.subplots_adjust(bottom=0.2)


##### Part where the question is related #####
ft = plt.figtext(0,footnote,wrap=True,va='bottom',fontsize=11)

#Have tried:
# ax.annotate(footnote,(0,-0.2),xycoords='figure fraction')
# plt.subplots_adjust(hspace=1.0,bottom=0.17)
# fig.subplots_adjust(bottom=0.2)



plt.tight_layout()

##### Part where the question is related #####

fig.savefig(outputPath)
# pickle.dump(fig,open((outputPath + '.fig.pickle'),'wb'))

# show plot
fig.show()
print('%s saved.' % outputPath)

这产生

plot

我的脚注一直被 xlabel 覆盖。我尝试了几乎所有可以在网上找到的解决方案。有人可以让我知道如何在图表中添加长脚注吗?格式必须像论文中那样。左右对齐图形的边缘(不是图形大小)。左对齐但跨越,以便除最后一行之外的行跨越以填充整行。

这里的例子:

Example

在此先感谢您! :)

解决方法

使用 views.py 对宽度计算进行小修正并手动设置底部焊盘(您可以使用交互式绘图后端获得正确的值,您可以在其中调整边界)我们得到:

import matplotlib.pyplot as plt
import matplotlib as mpl

fig,ax = plt.subplots()
ax.plot([1,2])
ax.set_xlabel('x-label')
fig.subplots_adjust(bottom=0.275)

footnote = 'Classified with mean step up height as the model\'s input. Classified with mean step up height as the model\'s input. Classified with mean step up height as the model\'s input. Classified with mean step up height as the model\'s input. Classified with mean step up height as the model\'s input. '

#https://gist.github.com/dneuman/90af7551c258733954e3b1d1c17698fe
class WrapText(mpl.text.Text):
    """
    WrapText(x,y,s,width,widthcoords,**kwargs)
    x,y       : position (default transData)
    text       : string
    width      : box width
    widthcoords: coordinate system (default screen pixels)
    **kwargs   : sent to matplotlib.text.Text
    Return     : matplotlib.text.Text artist
    """
    def __init__(self,x=0,y=0,text='',width=0,widthcoords=None,**kwargs):
        mpl.text.Text.__init__(self,x=x,y=y,text=text,wrap=True,clip_on=False,**kwargs)
        if not widthcoords:
            self.width = width
        else:
            a = widthcoords.transform_point([(0,0),(width,0)])
            self.width = a[1][0]-a[0][0]

    def _get_wrap_line_width(self):
        return self.width

trans = mpl.transforms.blended_transform_factory(
    ax.transAxes,fig.transFigure)    
wtxt = WrapText(0,footnote,width=1,va='bottom',widthcoords=ax.transAxes,transform=trans)
ax.add_artist(wtxt)
plt.show()

this excellent gist

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。