【发布时间】:2017-07-16 12:22:35
【问题描述】:
考虑以下玩具代码:
# -*- coding: utf-8 -*-
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as mpatches
def draw_circle_arrangement(ax, drawing_origin, drawing_space, scale, num_circles, box_height, box_width):
bw = drawing_space*(box_width*scale)
drawing_origin[0] = drawing_origin[0] - bw*0.5
circle_diameter = drawing_space*scale
circle_radius = 0.5*circle_diameter
y_delta = np.array([0., circle_diameter])
x_delta = np.array([circle_diameter, 0.])
cell_origin = drawing_origin + np.array([circle_radius, circle_radius])
y_delta_index = 0
x_delta_index = 0
for ci in range(num_circles):
cell_patch = mpatches.Circle(cell_origin + y_delta_index*y_delta + x_delta_index*x_delta, radius=circle_radius, color='k', fill=False, ls='solid', clip_on=False)
ax.add_artist(cell_patch)
if y_delta_index == box_height - 1:
y_delta_index = 0
x_delta_index += 1
else:
y_delta_index += 1
fig, ax = plt.subplots()
# each tuple is: number of circles, height of box containing circles, width of box containing circle
circle_arrangements = [(10, 2, 5), (3, 1, 3), (1, 1, 1)]
data = np.random.rand(3)
ax.set_ylim([0, 1])
ax.plot(np.arange(3) + 1, data, marker='o')
ax.get_xaxis().set_ticklabels([])
scale = 1./10.
for i, ca in enumerate(circle_arrangements):
do = np.array([1.0 + i, -0.2])
nc, bh, bw = ca
draw_circle_arrangement(ax, do, 0.8, scale, nc, bh, bw)
如您所见,圆形排列补丁在图的底部被裁剪?如何确保matplotlib 为图中的所有绘图提供了足够的空间?
【问题讨论】:
-
@ViníciusAguiar 这些问题不重复。他们使用相同的玩具代码,但提出了两个完全不同的问题:1)如何让补丁以与父轴不同的纵横比进行绘制,以及 2)如何确保所有补丁都适合图形区域。
-
完全正确,我很抱歉!
标签: matplotlib