小编ast*_*key的帖子

python matplotlib 错误栏图例选取

我正在尝试为类似于此示例的matplotlib 误差条图编写图例选择器。我希望能够单击图例中的错误栏/数据点来切换它们在轴中的可见性。问题在于,返回的图例对象plt.legend()不包含创建图例时使用的艺术家的任何数据。如果我例如。做:

import numpy as np
import matplotlib.pyplot as plt

fig, ax = plt.subplots()
x = np.linspace(0,10,100)
y = np.sin(x) + np.random.rand(100)
yerr = np.random.rand(100)

erbpl1 = ax.errorbar(x, y, yerr=yerr, fmt='o', label='A')
erbpl2 = ax.errorbar(x, 0.02*y, yerr=yerr, fmt='o', label='B')

leg = ax.legend()
Run Code Online (Sandbox Code Playgroud)

从这里似乎不可能通过使用该leg对象来访问传奇的艺术家。通常,可以使用更简单的图例来做到这一点,例如:

plt.plot(x, y, label='whatever')
leg = plt.legend()
proxy_lines = leg.get_lines()
Run Code Online (Sandbox Code Playgroud)

为您提供图例中使用的 Line2D 对象。然而,对于误差条图,leg.get_lines()返回一个空列表。这是有意义的,因为plt.errorbar返回一个matplotlib.container.ErrorbarContainer对象(其中包含数据点、误差条端盖、误差条线)。我希望图例有一个类似的数据容器,但我看不到这一点。我能管理的最接近的是leg.legendHandles指向误差条线,但不是数据点或端盖。如果您可以选择图例,则可以使用字典将它们映射到原始图,并使用以下函数打开/关闭错误栏。

def toggle_errorbars(erb_pl):
    points, caps, bars = erb_pl
    vis = bars[0].get_visible()
    for …
Run Code Online (Sandbox Code Playgroud)

python matplotlib

4
推荐指数
1
解决办法
4588
查看次数

python matplotlib和PyQT用于多选项卡绘图-导航

我创建了一个qt应用程序,可用于在多个选项卡中显示matplotlib数字。现在,我正在尝试获取标准的matplotlib导航工具栏,以使其适用于各个选项卡中的所有图形。到目前为止,我只设法使它适用于其中一个数据,但不是全部。

这是代码:

from PyQt4 import QtCore
from PyQt4 import QtGui as qt

from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt4agg import NavigationToolbar2QTAgg as NavigationToolbar
from matplotlib.figure import Figure

import itertools

class MultiTabNavTool(NavigationToolbar):
    #====================================================================================================
    def __init__(self, canvases, tabs, parent=None):
        self.canvases = canvases
        self.tabs = tabs

        NavigationToolbar.__init__(self, canvases[0], parent)

    #====================================================================================================
    def get_canvas(self):
        return self.canvases[self.tabs.currentIndex()]

    def set_canvas(self, canvas):
        self._canvas = canvas

    canvas = property(get_canvas, set_canvas)

class MplMultiTab(qt.QMainWindow):
    #====================================================================================================
    def __init__(self, parent=None, figures=None, labels=None):
        qt.QMainWindow.__init__(self, parent)

        self.main_frame = qt.QWidget()
        self.tabWidget = qt.QTabWidget( self.main_frame ) …
Run Code Online (Sandbox Code Playgroud)

python pyqt matplotlib

4
推荐指数
1
解决办法
3129
查看次数

标签 统计

matplotlib ×2

python ×2

pyqt ×1