matplotlib情节旋转90度没有发生

时间:2017-10-31 12:37:17

标签: python-3.x matplotlib svg

我正在使用matplotlib找到图像的边缘。我已经做了差不多。我想在图中将图像旋转90度。但它对我不起作用。我尝试过很多东西。下面是我的代码我试过的。

from scipy import misc
from skimage import color,measure
import matplotlib.pyplot as plt
from skimage.draw import ellipse
from skimage.measure import find_contours, approximate_polygon, subdivide_polygon
from PIL import Image
import numpy as np

filename = r"images/5601.jpg"
fimg = misc.imread(filename)
gimg = color.colorconv.rgb2grey(fimg)
contours = measure.find_contours(gimg, 0.8)
for n, contour in enumerate(contours):
    plt.plot(contour[:, 1], contour[:, 0], linewidth=2)

contour = contours[0]
new_s = contour.copy()
appr_s = approximate_polygon(new_s, tolerance=0.8)
fig, ax2 = plt.subplots(ncols=1, figsize=(7, 5))
ax2.plot(contour[:, 0], contour[:, 1])

#these are all what i have tried
#plt.xticks(rotation='vertical')
# for tick in ax2.get_xticklabels():
    # tick.set_rotation(45)
#plt.setp(ax2.xaxis.get_majorticklabels(), rotation=70 )
#ax2.tick_params(axis='both', rotation=45)
#fig.autofmt_xdate(bottom=0.5, rotation=90, ha='right')
#plt.hist(ax2, bins=10, orientation='horizontal')


plt.axis('off')
plt.tick_params(axis='both' , left='off', top='off', right='off', bottom='off', labelleft='off', labeltop='off', labelright='off', labelbottom='off')
plt.savefig("test.svg", format="svg")

输出结果为:

预期输出为:

提前致谢。

1 个答案:

答案 0 :(得分:2)

这里有很多选择。重要的是要注意旋转刻度在这里没有用。相反,请使用以下任一方法。

  • 使用invert_yaxis()翻转轴。这不会旋转图像,但会翻转图像垂直显示的轴。

    ax2.plot(contour[:, 1], contour[:, 0])
    ax2.invert_yaxis()
    
  • 使用numpy.flipud翻转图片。这不会旋转图像,而是在进一步处理之前将其垂直翻转。

    fimg = plt.imread(filename)
    fimg = np.flipud(fimg)
    # ...
    ax2.plot(contour[:, 1], contour[:, 0])
    
  • 使用numpy.rot90旋转图片。实际上你需要将它旋转180度(k=2)。

    fimg = plt.imread(filename)
    fimg = np.rot90(fimg,k=2)
    # ...
    ax2.plot(contour[:, 1], contour[:, 0])
    
  • 旋转输出曲线

    mat = lambda angle: np.array([[ np.cos(angle), np.sin(angle)],
                                  [-np.sin(angle), np.cos(angle)]])
    rotcontour = np.dot(contour, mat(np.deg2rad(180)))
    ax2.plot(rotcontour[:, 1], rotcontour[:, 0])