设置matplotlib ax.twny()绘图中图例标题的格式

设置matplotlib ax.twny()绘图中图例标题的格式,matplotlib,legend-properties,Matplotlib,Legend Properties,信不信由你,我需要帮助在一个简单的情节中格式化图例的标题(而不是情节的标题)。我正在twiny()图中绘制两组数据(X1和X2)与Y的对比 我调用matplotlib.lines为图例构建线条,然后调用plt.legend构建图例传递文本字符串以命名/解释线条,格式化文本并放置图例。我还可以将标题字符串传递给plt.legend,但我无法格式化它 我找到的最接近的解决方案是使用.legend()set_title为标题创建另一个“艺术家”,然后格式化标题文本。我将其分配给一个变量,并在上述plt

信不信由你,我需要帮助在一个简单的情节中格式化图例的标题(而不是情节的标题)。我正在twiny()图中绘制两组数据(X1和X2)与Y的对比

我调用matplotlib.lines为图例构建线条,然后调用plt.legend构建图例传递文本字符串以命名/解释线条,格式化文本并放置图例。我还可以将标题字符串传递给plt.legend,但我无法格式化它

我找到的最接近的解决方案是使用.legend()set_title为标题创建另一个“艺术家”,然后格式化标题文本。我将其分配给一个变量,并在上述plt.legend中调用该变量。这不会导致错误,也不会产生预期效果。我无法控制标题的位置

我已经阅读了很多关于传奇相关问题的S-O帖子和答案,查看了MPL文档、各种教程类型的网页,甚至在GIT hub问题上达到了顶峰(#10391)。我的问题的答案大概就在那里,但不是我能够成功实现的格式

#Imports
import matplotlib.pyplot as plt
import matplotlib.lines as mlines
import numpy as np
import seaborn as sns
plt.style.use('seaborn')

#Some made up data 
y = np.arange(0, 1200, 100)
x1 = (np.log(y+1))
x2 = (2.2*x1)

#Plot figure
fig = plt.figure(figsize = (12, 14))
fig = plt.figure()
ax1 = fig.add_subplot(111)
ax2 = ax1.twiny()

sy1, sy2 = 'b-', 'r-'

tp, bm = 0, 1100

red_ticks = np.arange(0, 11, 2)
ax1.plot(x1, y, sy1)
ax1.set_ylim(tp, bm)
ax1.set_xlim(0, 10)
ax1.set_ylabel('Distance (m)')
ax1.set_xlabel('Area')
ax1.set_xticks(red_ticks)

blue_ticks = np.arange(0, 22, 4)
ax2.plot(x2, y, sy2)
ax2.set_xlim(0, 20)
ax2.set_xlabel('Volume')
ax2.set_xticks(blue_ticks)
ax2.grid(False)

x1_line = mlines.Line2D([], [], color='blue')
x2_line = mlines.Line2D([], [], color='red')

leg = ax1.legend().set_title('Format Legend Title ?',
            prop = {'size': 'large', 
                    'family':'serif',
                    'style':'italic'})

plt.legend([x1_line, x2_line], ['Blue Model', 'Red Model'],
           title = leg,
           prop ={'size':12,
                'family':'serif',
                'style':'italic'},
            bbox_to_anchor = (.32, .92))
因此,我想要的是一种简单的方法来控制单个艺术家中图例标题和图例文本的格式,并且还可以控制所述图例的位置


上面的代码返回一个“未找到要放入图例中的标签句柄”。

您需要一个图例。您可以设置该图例的标题(而不是其他图例);然后根据你的喜好来设计

leg = ax2.legend([x1_line, x2_line], ['Blue Model', 'Red Model'],
                 prop ={'size':12, 'family':'serif', 'style':'italic'},
                 bbox_to_anchor = (.32, .92))
leg.set_title('Format Legend Title ?', prop = {'size': 24, 'family':'sans-serif'})


不相关但也很重要:注意代码中有两个数字。您应该删除其中一个。

感谢欧内斯特提供的解决方案和提示。快乐的小径!