コード例 #1
0
ファイル: graph.py プロジェクト: asuar078/python_workspace
 def doaxispositioner(self, axisname):
     if self.did(self.doaxispositioner, axisname):
         return
     self.doranges()
     if axisname in ["x", "x2", "y", "y2"]:
         self.axes[axisname].setpositioner(self.axespositioners[axisname])
     else:
         if axisname[1:] == "3":
             dependsonaxisname = axisname[0]
         else:
             dependsonaxisname = "%s%d" % (axisname[0], int(axisname[1:]) - 2)
         self.doaxiscreate(dependsonaxisname)
         sign = 2*(int(axisname[1:]) % 2) - 1
         if axisname[0] == "x" and self.flipped:
             sign = -sign
         if axisname[0] == "x" and not self.flipped or axisname[0] == "y" and self.flipped:
             y_pt = self.axes[dependsonaxisname].positioner.y1_pt - sign * (self.axes[dependsonaxisname].canvas.extent_pt + self.axesdist_pt)
             self.axes[axisname].setpositioner(positioner.lineaxispos_pt(self.xpos_pt, y_pt,
                                                                         self.xpos_pt + self.width_pt, y_pt,
                                                                         (0, sign), self.xvgridpath))
         else:
             x_pt = self.axes[dependsonaxisname].positioner.x1_pt - sign * (self.axes[dependsonaxisname].canvas.extent_pt + self.axesdist_pt)
             self.axes[axisname].setpositioner(positioner.lineaxispos_pt(x_pt, self.ypos_pt,
                                                                         x_pt, self.ypos_pt + self.height_pt,
                                                                         (sign, 0), self.yvgridpath))
コード例 #2
0
 def doaxispositioner(self, axisname):
     if self.did(self.doaxispositioner, axisname):
         return
     self.doranges()
     if axisname == "x":
         self.axes["x"].setpositioner(
             positioner.lineaxispos_pt(self.xpos_pt, self.ypos_pt,
                                       self.xpos_pt + self.width_pt,
                                       self.ypos_pt, (0, 1),
                                       self.xvgridpath))
     elif axisname == "x2":
         self.axes["x2"].setpositioner(
             positioner.lineaxispos_pt(self.xpos_pt,
                                       self.ypos_pt + self.height_pt,
                                       self.xpos_pt + self.width_pt,
                                       self.ypos_pt + self.height_pt,
                                       (0, -1), self.xvgridpath))
     elif axisname == "y":
         self.axes["y"].setpositioner(
             positioner.lineaxispos_pt(self.xpos_pt, self.ypos_pt,
                                       self.xpos_pt,
                                       self.ypos_pt + self.height_pt,
                                       (1, 0), self.yvgridpath))
     elif axisname == "y2":
         self.axes["y2"].setpositioner(
             positioner.lineaxispos_pt(self.xpos_pt + self.width_pt,
                                       self.ypos_pt,
                                       self.xpos_pt + self.width_pt,
                                       self.ypos_pt + self.height_pt,
                                       (-1, 0), self.yvgridpath))
     else:
         if axisname[1:] == "3":
             dependsonaxisname = axisname[0]
         else:
             dependsonaxisname = "%s%d" % (axisname[0],
                                           int(axisname[1:]) - 2)
         self.doaxiscreate(dependsonaxisname)
         sign = 2 * (int(axisname[1:]) % 2) - 1
         if axisname[0] == "x":
             y_pt = self.axes[dependsonaxisname].positioner.y1_pt - sign * (
                 self.axes[dependsonaxisname].canvas.extent_pt +
                 self.axesdist_pt)
             self.axes[axisname].setpositioner(
                 positioner.lineaxispos_pt(self.xpos_pt, y_pt,
                                           self.xpos_pt + self.width_pt,
                                           y_pt, (0, sign),
                                           self.xvgridpath))
         else:
             x_pt = self.axes[dependsonaxisname].positioner.x1_pt - sign * (
                 self.axes[dependsonaxisname].canvas.extent_pt +
                 self.axesdist_pt)
             self.axes[axisname].setpositioner(
                 positioner.lineaxispos_pt(x_pt, self.ypos_pt, x_pt,
                                           self.ypos_pt + self.height_pt,
                                           (sign, 0), self.yvgridpath))
コード例 #3
0
ファイル: graph.py プロジェクト: asuar078/python_workspace
    def __init__(self, xpos=0, ypos=0, width=None, height=None, ratio=goldenmean,
                 key=None, backgroundattrs=None, axesdist=0.8*unit.v_cm, flipped=False,
                 xaxisat=None, yaxisat=None, **axes):
        graph.__init__(self)

        self.xpos = xpos
        self.ypos = ypos
        self.xpos_pt = unit.topt(self.xpos)
        self.ypos_pt = unit.topt(self.ypos)
        self.xaxisat = xaxisat
        self.yaxisat = yaxisat
        self.key = key
        self.backgroundattrs = backgroundattrs
        self.axesdist_pt = unit.topt(axesdist)
        self.flipped = flipped

        self.width = width
        self.height = height
        if width is None:
            if height is None:
                raise ValueError("specify width and/or height")
            else:
                self.width = ratio * self.height
        elif height is None:
            self.height = (1.0/ratio) * self.width
        self.width_pt = unit.topt(self.width)
        self.height_pt = unit.topt(self.height)

        for axisname, aaxis in axes.items():
            if aaxis is not None:
                if not isinstance(aaxis, axis.linkedaxis):
                    self.axes[axisname] = axis.anchoredaxis(aaxis, self.texrunner, axisname)
                else:
                    self.axes[axisname] = aaxis
        for axisname, axisat in [("x", xaxisat), ("y", yaxisat)]:
            okey = axisname + "2"
            if not axes.has_key(axisname):
                if not axes.has_key(okey) or axes[okey] is None:
                    self.axes[axisname] = axis.anchoredaxis(axis.linear(), self.texrunner, axisname)
                    if not axes.has_key(okey):
                        self.axes[okey] = axis.linkedaxis(self.axes[axisname], okey)
                else:
                    self.axes[axisname] = axis.linkedaxis(self.axes[okey], axisname)
            elif not axes.has_key(okey) and axisat is None:
                self.axes[okey] = axis.linkedaxis(self.axes[axisname], okey)

        if self.axes.has_key("x"):
            self.xbasepath = self.axes["x"].basepath
            self.xvbasepath = self.axes["x"].vbasepath
            self.xgridpath = self.axes["x"].gridpath
            self.xtickpoint_pt = self.axes["x"].tickpoint_pt
            self.xtickpoint = self.axes["x"].tickpoint
            self.xvtickpoint_pt = self.axes["x"].vtickpoint_pt
            self.xvtickpoint = self.axes["x"].tickpoint
            self.xtickdirection = self.axes["x"].tickdirection
            self.xvtickdirection = self.axes["x"].vtickdirection

        if self.axes.has_key("y"):
            self.ybasepath = self.axes["y"].basepath
            self.yvbasepath = self.axes["y"].vbasepath
            self.ygridpath = self.axes["y"].gridpath
            self.ytickpoint_pt = self.axes["y"].tickpoint_pt
            self.ytickpoint = self.axes["y"].tickpoint
            self.yvtickpoint_pt = self.axes["y"].vtickpoint_pt
            self.yvtickpoint = self.axes["y"].vtickpoint
            self.ytickdirection = self.axes["y"].tickdirection
            self.yvtickdirection = self.axes["y"].vtickdirection

        self.axesnames = ([], [])
        for axisname, aaxis in self.axes.items():
            if axisname[0] not in "xy" or (len(axisname) != 1 and (not axisname[1:].isdigit() or
                                                                   axisname[1:] == "1")):
                raise ValueError("invalid axis name")
            if axisname[0] == "x":
                self.axesnames[0].append(axisname)
            else:
                self.axesnames[1].append(axisname)
            aaxis.setcreatecall(self.doaxiscreate, axisname)

        self.axespositioners = dict(x=positioner.lineaxispos_pt(self.xpos_pt, self.ypos_pt,
                                                                self.xpos_pt + self.width_pt, self.ypos_pt,
                                                                (0, 1), self.xvgridpath),
                                    x2=positioner.lineaxispos_pt(self.xpos_pt, self.ypos_pt + self.height_pt,
                                                                 self.xpos_pt + self.width_pt, self.ypos_pt + self.height_pt,
                                                                 (0, -1), self.xvgridpath),
                                    y=positioner.lineaxispos_pt(self.xpos_pt, self.ypos_pt,
                                                                self.xpos_pt, self.ypos_pt + self.height_pt,
                                                                (1, 0), self.yvgridpath),
                                    y2=positioner.lineaxispos_pt(self.xpos_pt + self.width_pt, self.ypos_pt,
                                                                 self.xpos_pt + self.width_pt, self.ypos_pt + self.height_pt,
                                                                 (-1, 0), self.yvgridpath))
        if self.flipped:
            self.axespositioners = dict(x=self.axespositioners["y2"],
                                        y2=self.axespositioners["x2"],
                                        y=self.axespositioners["x"],
                                        x2=self.axespositioners["y"])