Matplotlib笔记本裁剪人物

时间:2017-10-20 20:12:13

标签: python matplotlib jupyter-notebook

我正在尝试在jupyter笔记本中创建一个交互式脚本,它将在周期中绘制不同的图像并询问用户的决定。我来到了可以用3个子图重绘图的地步,但是不知道如何配置交互式图的大小以使所有子图可见。正如您所看到的,只有第二个子图的一部分从右侧窥视。

我将不胜感激任何帮助。

cropped figure with 3 subplots

这是我的代码:

import cv2
import matplotlib.pyplot as plt
import pandas as pd
% matplotlib notebook

fig, [ax1, ax2, ax3] = plt.subplots(1,3, figsize=(5, 5))
ax1.set_xlabel("src")
ax2.set_xlabel("rgb")
ax3.set_xlabel("hsv")
ax2.set_xlim([-1,257])
ax3.set_xlim([-1,257])
plt.legend(loc='upper right')

color = ('r','g','b') # HSV colors
labels = ('h', 's', 'v')  

plt.subplots_adjust(right = 2.3) 

for i in range(0,3):
  im = cv2.imread("image.png")
  im_rgb = cv2.cvtColor(im, cv2.COLOR_BGR2RGB)
  im_hsv = cv2.cvtColor(im, cv2.COLOR_BGR2HSV)
  ax1.imshow(im_rgb, cmap='gray')
  for i,col in enumerate(color):
    histr = cv2.calcHist([im_rgb],[i],None,[256],[0,256])
    ax2.plot(histr, color = col, label=col)
  for i,col in enumerate(color):
    histr = cv2.calcHist([im_hsv],[i],None,[256],[0,256])
    ax3.plot(histr, color = col, label=labels[i])
  fig.canvas.draw()  
  answer = input("Next? " )

1 个答案:

答案 0 :(得分:0)

subplots_adjust documentation可能并不明显,但topright的参数需要小于1才能使轴保持在图边界内,因为这些参数是图形边距开始时图形高度和宽度的分数

如果您提供right=2.3,则意味着最后一个子图的右边缘以图形宽度的2.3倍结束 - 这很可能是不受欢迎的。

enter image description here

因此请将right保留在1以下,并使所有绘图都适合图中,您可能需要调整图形大小,例如figsize=(13,5)