多个轴的单个图例[重复]

Posted

技术标签:

【中文标题】多个轴的单个图例[重复]【英文标题】:Single legend for multiple axes [duplicate] 【发布时间】:2012-12-29 22:12:09 【问题描述】:

我有以下示例代码:

fig1.suptitle('Test')
ax1 = fig1.add_subplot(221)
ax1.plot(x,y1,color='b',label='aVal')
ax2 = ax1.twinx()
ax2.plot(x,y2,color='g',label='bVal')
ax2.grid( ls='--', color='black')
legend([ax1,ax2], loc=2)

子图在同一个子图上有两个不同比例的轴,我只希望两个轴都有一个图例。我尝试了上面的代码,但它不起作用,只能从 ax2 生成详细信息。有什么想法吗?

【问题讨论】:

查看***.com/questions/5484922/… 了解相同的问题。并且也给出了相同的解决方案。 是的,确实如此。我对 SO 的搜索没有提出来。此外,该问题并未说明它需要在标题上添加一个图例。但是谢谢你让我知道。我想知道是否有比我想出的更优雅的东西。也许我们应该添加一个执行此操作的 ax1.combine_legends(ax2) 方法? 【参考方案1】:

我认为这是一个可行的解决方案!还有比这更好的方法吗?

fig1.suptitle('Test')
ax1 = fig1.add_subplot(221)
ax1.plot(x,y1,color='b',label='aVal')
ax2 = ax1.twinx()
ax2.plot(x,y2,color='g',label='bVal')
ax2.grid( ls='--', color='black')
h1, l1 = ax1.get_legend_handles_labels()
h2, l2 = ax2.get_legend_handles_labels()
ax1.legend(h1+h2, l1+l2, loc=2)

【讨论】:

这是唯一对我有用的解决方案,当在一个图中有散点图和常规图时。不错!【参考方案2】:

这确实是一篇旧帖子,但我想我找到了一种更简单的方法,可以进行更多控制。

这里是python3.5上的(matplotlib.version'1.5.3'):

import matplotlib.pyplot as plt
fig, ax1 = plt.subplots()
plt.suptitle('Test')
ax2 = ax1.twinx()
a, =  ax1.plot([1, 2, 3], [4, 5, 6], color= 'blue', label= 'plt1')
b, = ax2.plot([7, 8, 9],[10, 11, 12], color= 'green', label= 'plt2')
p = [a, b]
ax1.legend(p, [p_.get_label() for p_ in p],
           loc= 'upper center', fontsize= 'small')

【讨论】:

以上是关于多个轴的单个图例[重复]的主要内容,如果未能解决你的问题,请参考以下文章

当有多个 [重复] 时删除 ggplot2 中的额外图例

具有不同标题的R图例[重复]

ggplot2图例没有出现的原因[重复]

CSS Flex除单个右水平对齐元素外的所有中心[重复]

创建单个对象时如何执行多个构造函数[重复]

在Python中用单个空格替换多个空格[重复]