以灰度保存 matplotlib 图
我有一些彩色图需要以灰度保存。有没有一种简单的方法可以在不改变绘图格式的情况下做到这一点?
I have some color plots that I need to be saved in grayscale. Is there an easy way to do this without changing the plotting formats?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
有一个简单的解决方案:
There is an easy solution:
目前直接从 matplotlib 进行操作很尴尬,但在“未来”,他们计划支持对图形进行
set_gray(True)
调用(请参阅邮件列表线程 此处)。最好的选择是将其保存为彩色并转换它,可以在 python 中使用 PIL:
或从命令行使用 imagemagick:
It's currently awkward to do directly from matplotlib, but in "the future" they plan to support a
set_gray(True)
call on the figure (see the mailing list thread here).Your best options will be to save it in color and convert it, either in python with PIL:
or from the command line with imagemagick:
其实这个问题之前就有人问过。这是一个非常好的答案,在谷歌上排名第二(截至今天):
使用 matplotlib 将图像显示为灰度
解决方案非常相似到 Suki 的...
哦,好吧,我很无聊,所以我在这里发布了一个完整的代码:
这将生成一个彩色图表,然后读取它,将其转换为灰色缩放,并将保存 png 和 pdf。
Actually, this was asked before. Here is a pretty good answer, which comes 2nd on google (as of today):
Display image as grayscale using matplotlib
And the solution is VERY similar to Suki's...
Oh, well, I am bored, so I post here also a full blown code:
This will produce a graph in color, than read it, convert it to gray scale, and will save a png and pdf.
我也在这个问题上苦苦挣扎。据我所知,matplotlib不支持直接转换为灰度,但您可以保存彩色pdf,然后使用ghostscript将其转换为灰度:
I am struggling with this issue too. As far as I can tell, matplotlib doesn't support direct conversion to grayscale, but you can save a color pdf and then convert it to grayscale with ghostscript:
添加到 Mu Mind 的解决方案中,
如果出于某种原因您想避免将其写入文件,您可以像文件一样使用 StringIO:
And to add to Mu Mind's solution
If for whatever reason you want to avoid writing it to a file you can use StringIO like a file:
根据 Ian Goodfellow 的回答开发,这里是一个 python 脚本,它生成并运行 Ghostscript 命令,将 PDF 转换为灰度。它比栅格化为 PNG 的答案更好,因为它保留了绘图的矢量表示。
将其保存为 to_gray.py 并按如下方式运行:
Developed from Ian Goodfellow's answer, here is a python script that generates and runs a ghostscript command that converts a PDF into grayscale. It is preferable to the answers that rasterise to PNG as it retains the vector representation of the plot.
Save it as to_gray.py and run it like this: