【问题标题】:Transparent background in gnuplot multiplotgnuplot multiplot中的透明背景
【发布时间】:2012-05-15 18:09:25
【问题描述】:

我想在我的 gnuplot 图形中获得透明背景。 我到现在为止的编码是:

#! /usr/bin/python

from numpy import *
import Gnuplot as gp
import Gnuplot.funcutils

x = (1,2,3)
y=(2,4,5)
x1 = (3,6,8)
g = gp.Gnuplot()
g("set terminal svg size 200,400")
g("set output 'filename.svg'")
g("unset xtics")
g("unset ytics")
g("set multiplot layout 3,1 title 'Title here'")
g("set object 1 rectangle from screen 0,0 to screen 1,1 fillcolor rgb '#ff0000'      behind")
#First
g("set tmargin 2")
g("set title 'Plot'")
g("unset key")
d = gp.Data(x,y,with_="lines")
g.plot(d)
#Secon
g("set title 'Plot2'")
g("unset key")
d1 = gp.Data(x1,y,with_="lines")
g.plot(d1)
#Third
g("set title 'Plot3'")
g("unset key")
d2 = gp.Data(y,x,with_="lines")
g.plot(d2)
g("unset multiplot")

我有一个红屏,但只是第三个情节。 (是的,我必须更改 rgb 组合以获得透明背景颜色。但是,它是什么?)

提前致谢, 脸书

【问题讨论】:

  • 你使用什么操作系统——什么svg查看器?上面的脚本适用于我在 Ubuntu linux 上,使用 Gnome 之眼作为我的查看器(如果我删除 set object 代码)。当然,您可以通过set object 1 rectangle ... fillstyle transparent solid 0 使背景透明(0-1 为透明级别,0 为完全透明)
  • 另外,你用的是什么版本的gnuplot?
  • 最后一个问题——最终目标是让给定的颜色显示在所有情节的后面吗?如果是这样,您可以在任何支持对象的终端中实现不透明(我可以轻松修改您的脚本来实现)。
  • 是的,感谢您的第 n 个建议。如果我使用“eog”它是透明的,而如果我在 shell 中使用“display”它看起来不透明。我会尝试我自己的脚本,我会一直支持你的。
  • 简单说一下display -- display 是一个围绕(主要)为光栅图像创建的 imagemagick 例程的包装器。 display 使用gs (ghostscript) 来处理矢量图形(我认为),我听说ghostscript 不能正确处理除postscript 以外的文件格式的透明度(例如pdf,也许svg 也.. . ).所以,我不相信您在 display 中看到的就是文件中的实际内容。

标签: python gnuplot


【解决方案1】:

Gnuplot 可以直接输出透明背景,但不是针对所有格式。例如,这可以为 .png 完成:

set term png transparent truecolor
set output 'plot.png'
plot sin(x)

transparent 处理背景透明度,truecolor 处理透明对象/绘图填充。

另一种从 gnuplot 中获得透明背景的方法是输出 .eps 并将其转换为 .png 或某种支持透明度的光栅格式。

Gnuplot 示例:

set terminal postscript enhanced color
set output 'plot.eps'
plot sin(x)

在 bash 中:

convert plot.eps -rotate 90 plot.png

生成的 .png 具有透明背景,而 .eps 则没有。这可能与 imagemagick 处理透明度的方式有关。我将 .svg 转换为 .png 时不会发生同样的情况;它仍然是白色背景。

使用 Inkscape 等矢量图形编辑器添加透明度可能会有一些运气。

【讨论】:

  • Gnuplot 可以在png 文件中实现透明化。 set terminal png transparent truecolor 应该可以解决问题(透明处理背景,而真彩色处理任何其他可能是透明的对象)——或者使用 pngcairo——set term pngcairo transparent。在 gnuplot 中完成这一切可能会产生比从转换中获得的更清晰的图像(尤其是文本)
  • 你是对的!我更新了我的答案以包括你的一些 cmets。
猜你喜欢
  • 2014-09-11
  • 2022-01-07
  • 2011-03-08
  • 2015-03-26
  • 1970-01-01
  • 1970-01-01
  • 2021-09-20
  • 2019-02-07
  • 2020-10-15
相关资源
最近更新 更多