以灰度保存matplotlib图

jlc*_*lin 20 python matplotlib

我有一些颜色图需要以灰度保存.有没有改变绘图格式的简单方法?

Jak*_*ang 9

有一个简单的解决方案:

plt.imsave(filename, image, cmap='gray')
Run Code Online (Sandbox Code Playgroud)


Mu *_*ind 8

目前直接从matplotlib做起来很尴尬,但在"未来"他们计划支持set_gray(True)对图的调用(请参阅此处的邮件列表线程).

你最好的选择是保存它的颜色并转换它,在python和PIL中:

import Image
Image.open('color.png').convert('L').save('bw.png')
Run Code Online (Sandbox Code Playgroud)

或者从带有imagemagick的命令行:

convert -type Grayscale color.png bw.png
Run Code Online (Sandbox Code Playgroud)


Oz1*_*123 5

实际上,这是以前问过的。这是一个很好的答案,在Google上排名第二(截至今天):
使用matplotlib将图像显示为灰度

解决方案非常类似于Suki的...

哦,好,我很无聊,所以我在这里也发布了完整的代码:

import numpy as np
import pylab as p
xv=np.ones(4)*.5
yv=np.arange(0,4,1)
xv1=np.ones(4)*-.5
yv1=np.arange(0,4,1)

#red vertical line on the right
yv2=np.arange(0,1.5,0.1)
xv2=np.ones_like(yv2)*.7

#red vertical line on the left
yv3=np.arange(0,2,0.01)
xv3=np.ones_like(yv3)*-0.7

###
xc=np.arange(-1.4,2,0.05)
yc=np.ones_like(xc)*1

fig = p.figure()
ax1 = fig.add_subplot(111)
#adjustprops = dict(left=0.12, bottom=0.2, right=0.965, top=0.96, wspace=0.13, hspace=0.37)
#fig.subplots_adjust(**adjustprops)
ax1.plot(xv,yv, color='blue', lw=1, linestyle='dashed')
ax1.plot(xv1,yv1, 'green', linestyle='dashed')
ax1.plot(np.r_[-1:1:0.2],np.r_[-1:1:0.2],'red')
ax1.plot(xc,yc, 'k.', markersize=3)

p.savefig('colored_image.png')

import matplotlib.image as mpimg
import matplotlib.cm as cm
import Image

figprops = dict(figsize=(10,10), dpi=100)
fig1 = p.figure(**figprops)
#fig1 = p.figure()
#ax1 = fig.add_subplot(111)
adjustprops = dict()
image=Image.open('colored_image.png').convert("L")
arr=np.asarray(image)
p.figimage(arr,cmap=cm.Greys_r)
p.savefig('grayed.png')
p.savefig('grayed.pdf',papertype='a4',orientation='portrait')
Run Code Online (Sandbox Code Playgroud)

这将产生彩色图形,而不是读取图形,将其转换为灰度,并保存png和pdf。

  • 这个答案不是很好,因为它需要光栅化绘图和其中的所有字体。转换为.png时会发生栅格化。最好将pdf写入文件系统,然后将其转换为灰度,也许使用ghostscript。 (2认同)