Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 带EPS的Matplotlib imshow_Python_Svg_Matplotlib_Eps - Fatal编程技术网

Python 带EPS的Matplotlib imshow

Python 带EPS的Matplotlib imshow,python,svg,matplotlib,eps,Python,Svg,Matplotlib,Eps,是否有一种方法可与matplotlib一起使用,以放置EPS或SVG(或任何可缩放矢量格式)中的徽标,以便将徽标放置在图形上并将最终文件输出为EPS。现在我得到了一个非常糟糕的渲染图形,因为有一个.png文件试图转换为EPS格式,目标是将图像保存为.EPS或.svg 我认为这可能是由于后端的限制,我愿意更改我使用的后端 这是不起作用的: ax1.set_axis_bgcolor('#fafafa') img = image.imread('./static/images

是否有一种方法可与matplotlib一起使用,以放置EPS或SVG(或任何可缩放矢量格式)中的徽标,以便将徽标放置在图形上并将最终文件输出为EPS。现在我得到了一个非常糟糕的渲染图形,因为有一个
.png
文件试图转换为EPS格式,目标是将图像保存为
.EPS
.svg

我认为这可能是由于后端的限制,我愿意更改我使用的后端

这是不起作用的:

    ax1.set_axis_bgcolor('#fafafa')
    
    img = image.imread('./static/images/logo.png')
    image_axis = fig.add_axes(ax1.get_position())
    image_axis.patch.set_visible(False)
    image_axis.yaxis.set_visible(False)
    image_axis.xaxis.set_visible(False)
    image_axis.set_xlim(0,19.995)
    image_axis.set_ylim(0,11.25)

    image_axis.imshow(img, extent=(11.79705,18.99525,.238125,1.313625), zorder=-1, alpha=0.15) #need to keep a 5.023 x by y ratio (.4 x .079)

    fig.savefig('static/images/graphs/'+filename+'.eps', format='eps', bbox_inches='tight')

有更新吗?

在这种情况下,我通常会通过以下方式获得更好的渲染效果:

from PIL import Image

logo = Image.open('icons\logo.png')
# TODO define bbox as a matplotlib.transforms.Bbox
image_axis.imshow(logo, clip_box=bbox, aspect='equal',
   origin='lower', interpolation='nearest')

(Matplotlib 1.4.2,如果您使用的是旧版本,使用
插值和
原点
选项可能会有所帮助)

我删除了我的代码片段,因为它没有用处

在Matplotlib中不能将本机SVG用作图像。Matplotlib本机仅支持png,然后返回到不支持svg的枕头,请参阅或Matplotlib图像文档

枕头支持每股收益,所以这将工作! (我不确定matplotlib在内部会如何处理它)

我是这样使用它的:

# Pillow must be there
import matplotlib.image as mpimg

def Save_svg(fig):
    # expects a matplotlib figure
    # And puts a logo into a frameless new axes
    imagefile = 'logo.eps'
    svgfile   = 'output.svg'
    logoax    = [0.265, 0.125, 0.3, 0.3]
    img=mpimg.imread(imagefile)
    #
    newax = fig.add_axes(logoax, anchor='SW', zorder=100)
    newax.imshow(img)
    newax.axis('off')
    #
    fig.savefig(svgfile,dpi=300)

这是一个老生常谈的问题,但值得为当前和未来的游客回答

有一种方法可以加载SVG文件并将其转换为Path对象,在包中实现。从项目页面:

SVG中的路径由“path”元素定义,该元素包含一个
d=“(路径数据)”
属性,该属性包含moveto、line、curve(三次和二次Béziers)、arc和closepath指令。Matplotlib实际上本机支持所有这些指令,但不提供解析器或完全兼容的API


在看到。

您刚试过吗?这意味着,如果传递给
imshow
的图像是非png的,matplotlib将依赖于PIL,而PIL应该能够处理eps()。我手头没有任何eps文件要测试,但明天可能会尝试。这是否适用于矢量图形-与PNG相反?PIL可以处理.eps文件。它们将被光栅化,但您可以控制点数(请参见链接)。目标是将图形另存为eps或其他可缩放的矢量图形,包括徽标。好的。有了这段代码,您可以将图形保存为pdf格式(可能还有eps格式,未经测试),其中包含徽标-但它将作为光栅图像嵌入。您的示例嵌入了jpg徽标-我认为OP想要嵌入eps/svg。我认为关键是他们希望始终保持矢量图形。@JRichardSnape这是正确的-目标是以SVG/EPS格式输出。我仍然没有解决这个问题,但如果我解决了,我会更新。我最近已经解决了它,所以我完全更新了上面的答案