Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def test_node_theta(nodelist, node):
"""
Tests node_theta function.
"""
assume(len(nodelist) > 0)
assume(node in nodelist)
theta_obs = node_theta(nodelist, node)
i = nodelist.index(node)
theta_exp = -np.pi + i * 2 * np.pi / len(nodelist)
if theta_exp > np.pi:
theta_exp = np.pi - theta_exp
assert np.allclose(theta_obs, theta_exp)
def compute_node_positions(self):
"""
Uses the get_cartesian function to compute the positions of each node
in the Circos plot.
"""
xs = []
ys = []
node_r = self.nodeprops["radius"]
radius = circos_radius(n_nodes=len(self.graph.nodes()), node_r=node_r)
self.plot_radius = radius
self.nodeprops["linewidth"] = radius * 0.01
for node in self.nodes:
x, y = get_cartesian(r=radius, theta=node_theta(self.nodes, node))
xs.append(x)
ys.append(y)
self.node_coords = {"x": xs, "y": ys}
def draw_edges(self):
"""
Renders edges to the figure.
"""
for i, (start, end) in enumerate(self.edges):
start_theta = node_theta(self.nodes, start)
end_theta = node_theta(self.nodes, end)
verts = [get_cartesian(self.plot_radius, start_theta),
(0, 0),
get_cartesian(self.plot_radius, end_theta)]
codes = [Path.MOVETO, Path.CURVE3, Path.CURVE3]
path = Path(verts, codes)
self.edgeprops['facecolor'] = 'none'
self.edgeprops['edgecolor'] = self.edgecolors[i]
patch = patches.PathPatch(path, lw=1, **self.edgeprops)
self.ax.add_patch(patch)
Uses the get_cartesian function to compute the positions of each node
label in the Circos plot.
This method is always called after the compute_node_positions
method, so that the plot_radius is pre-computed.
This will also add a new attribute, `node_label_rotation` to the object
which contains the rotation angles for each of the nodes. Together with
the node coordinates this can be used to add additional annotations
with rotated text.
"""
self.init_node_label_meta()
for node in self.nodes:
# Define radius 'radius' and circumference 'theta'
theta = node_theta(self.nodes, node)
# multiplication factor 1.02 moved below
radius = self.plot_radius + self.nodeprops["radius"]
# Coordinates of text inside nodes
if self.node_label_layout == "numbers":
radius_adjustment = self.plot_radius / radius
else:
radius_adjustment = 1.02
x, y = get_cartesian(r=radius * radius_adjustment, theta=theta)
# ----- For numbered nodes -----
# Node label x-axis coordinate
tx, _ = get_cartesian(r=radius, theta=theta)
# Create the quasi-circular positioning on the x axis
tx *= 1 - np.log(np.cos(theta) * self.nonzero_sign(np.cos(theta)))
def draw_edges(self):
"""
Renders edges to the figure.
"""
for i, (start, end) in enumerate(self.graph.edges()):
start_theta = node_theta(self.nodes, start)
end_theta = node_theta(self.nodes, end)
verts = [
get_cartesian(self.plot_radius, start_theta),
(0, 0),
get_cartesian(self.plot_radius, end_theta),
]
color = self.edge_colors[i]
codes = [Path.MOVETO, Path.CURVE3, Path.CURVE3]
lw = self.edge_widths[i]
path = Path(verts, codes)
patch = patches.PathPatch(
path, lw=lw, edgecolor=color, zorder=1, **self.edgeprops
)
self.ax.add_patch(patch)
def compute_node_positions(self):
"""
Uses the get_cartesian function to computes the positions of each node
in the Circos plot.
Returns `xs` and `ys`, lists of x- and y-coordinates.
"""
xs = []
ys = []
for node in self.nodes:
theta = node_theta(self.nodes, node)
x, y = get_cartesian(self.plot_radius, theta)
xs.append(x)
ys.append(y)
self.node_coords = {'x': xs, 'y': ys}
def draw_edges(self):
"""
Renders edges to the figure.
"""
for i, (start, end) in enumerate(self.edges):
start_theta = node_theta(self.nodes, start)
end_theta = node_theta(self.nodes, end)
verts = [get_cartesian(self.plot_radius, start_theta),
(0, 0),
get_cartesian(self.plot_radius, end_theta)]
codes = [Path.MOVETO, Path.CURVE3, Path.CURVE3]
path = Path(verts, codes)
self.edgeprops['facecolor'] = 'none'
self.edgeprops['edgecolor'] = self.edgecolors[i]
patch = patches.PathPatch(path, lw=1, **self.edgeprops)
self.ax.add_patch(patch)
def draw_edges(self):
"""
Renders edges to the figure.
"""
for i, (start, end) in enumerate(self.graph.edges()):
start_theta = node_theta(self.nodes, start)
end_theta = node_theta(self.nodes, end)
verts = [
get_cartesian(self.plot_radius, start_theta),
(0, 0),
get_cartesian(self.plot_radius, end_theta),
]
color = self.edge_colors[i]
codes = [Path.MOVETO, Path.CURVE3, Path.CURVE3]
lw = self.edge_widths[i]
path = Path(verts, codes)
patch = patches.PathPatch(
path, lw=lw, edgecolor=color, zorder=1, **self.edgeprops
)
self.ax.add_patch(patch)