- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
上一个问题涉及使用 savefig()
以与屏幕上显示的相同的面色(背景色)保存,即:
fig = plt.figure()
fig.patch.set_facecolor('blue')
fig.savefig('foo.png', facecolor=fig.get_facecolor())
Matplotlib figure facecolor (background color)
(使用savefig()
需要我们重新指定背景颜色。)
我还可以为透明度指定一个 alpha,例如:How to set opacity of background colour of graph wit Matplotlib
fig.patch.set_alpha(0.5)
我找不到一种方法来制作具有透明面部颜色的图形,就像它出现在屏幕上一样。文档似乎不完整:http://matplotlib.org/faq/howto_faq.html#save-transparent-figures - 未显示实际节省。将 transparent=True
与 savefig()
一起使用并没有使 facecolor 透明的预期效果,相反,它似乎使除了轴图例之外的所有东西都在该颜色之上透明(包括图形背景)。
编辑:一些相关的代码摘录:
def set_face_color(fig, facecolor):
if facecolor is False:
# Not all graphs get color-coding
facecolor = fig.get_facecolor()
alpha = 1
else:
alpha = 0.5
color_with_alpha = colorConverter.to_rgba(
facecolor, alpha)
fig.patch.set_facecolor(color_with_alpha)
def save_and_show(plt, fig, save, disp_on, save_as):
if save:
plt.savefig(save_as, dpi=dpi_file, facecolor=fig.get_facecolor(),
edgecolor='none')
if disp_on is True:
figManager = plt.get_current_fig_manager()
figManager.window.showMaximized()
plt.show()
else:
plt.close('all')
也许可以将它们结合起来,但我经常在绘图函数的开头调用 set_face_color()
,然后再构建子图网格,然后调用 save_and_show()
接近尾声。我想它应该可以在任何一个地方工作,但最理想的情况是我更愿意将函数分开并能够提取 alpha 以从最终图传递给 savefig()
。
编辑 2 - 值(value)一千字
Alpha = 左边 0.5,右边 1。
t = [1, 2, 3, 4, 5]
fig = plt.figure()
fig.patch.set_alpha(0.5)
fig.set_facecolor('b')
plt.plot(t, t)
fig2 = plt.figure()
fig2.set_facecolor('b')
plt.plot(t,t)
最佳答案
我在 Matplotlib 1.5 上运行了您的代码,发现它为我生成了预期的输出。对于 future 发生的所有事情,我在下面给出了两种简明的方法来实现这一点。
请注意,您绝对不想将 transparent=True
设置为 savefig 的选项,因为这将覆盖 facecolors,正如您在 matplotlib.figure.savefig source 中看到的那样.
要真正解决您的问题,您发布的第二个链接How to set opacity of background colour of graph wit Matplotlib实际上解决了问题。问题中代码片段的问题是使用 fig.set_facecolor
而不是 fig.patch.set_facecolor
从上面的链接问题中使用 facecolor 参数来保存图
import matplotlib.pyplot as plt
fig = plt.figure()
fig.patch.set_facecolor('b') # instead of fig.patch.set_facecolor
fig.patch.set_alpha(0.5)
plt.plot([1,3], [1,3])
plt.tight_layout()
plt.show()
plt.savefig('method1.png', facecolor=fig.get_facecolor())
你也可以通过rcParams指定savefig facecolor。
import matplotlib.pyplot as plt
import matplotlib as mpl
fig = plt.figure()
col = 'blue'
#specify color of plot when showing in program.
#fig.set_facecolor(col) also works
fig.patch.set_facecolor(col)
#specify color of background in saved figure
mpl.rcParams['savefig.facecolor'] = col
#set the alpha for both plot in program and saved image
fig.patch.set_alpha(0.5)
plt.plot([1,3], [1,3])
plt.tight_layout()
plt.show()
plt.savefig('method2.png')
如果您希望轴具有背景,这些解决方案应保持背景不变(例如 Erotemic 评论中由 seaborn 生成的背景)。如果您想更明确地添加:
ax.patch.set_color('palegoldenrod') # or whatever color you like
ax.patch.set_alpha(.7)
轴补丁 alpha 将传输到 savefig,无需额外的努力。
请注意,在这两种情况下,我都使用了 plt.tight_layout()
来消除已保存图形中无用的额外空间。您可以在 matplotlib documentation 中阅读更多相关信息.
关于python - 保存时的 Matplotlib 图 facecolor alpha(背景色、透明度),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24542610/
我有一个等高线图,我想使用具有纯白色背景的图例,以便图例在等高线上可读。 我的问题是,当我更改面部颜色时,没有任何反应。我也尝试过更改framealpha,但没有任何反应。这是一个玩具代码和结果图。如
我想绘制一个 4 维的 matplotlib 曲面图。最初,我会将数据放在: [(X, Y, Z, P)] 所以我想要一个 3D 表面,但有一个颜色图,由 P 的值表示。 我看到了一个很好的解决方案来
假设我正在绘制具有两种不同表面颜色的东西,如下所示的红色和蓝色。我想向图例添加两个项目,其中包含自定义字符串和我的集合中每种颜色的颜色。 我该怎么做? # generate the plot from
首先,我试图在 matplotlib 中绘制球谐函数,正如它们在 mayavi 中所见:http://docs.enthought.com/mayavi/mayavi/auto/example_sph
谁能解释一下为什么下面的代码在设置图形的facecolor时不起作用? import matplotlib.pyplot as plt # create figure instance fig1 =
我正在尝试让我的 jupyter/python/%matplotlib 图表在深色背景下工作。我想为完整图像设置白色背景颜色,而不是默认透明。 %matplotlib notebook import
我正在尝试使用 facecolors 以预定义的颜色为表面着色 3D。这里的问题是 cm.ScalarMappable 规范化表面 V 的颜色,而 plt.cm.jet 不规范化,因此颜色和颜色条不匹
我在网格中有一些数据,我用 streamplot 绘制流线图,颜色和宽度与速度相关。如何更改箭头的颜色或仅更改边缘颜色?我的目标是强调流向。如果有人有其他方法可以做到这一点.. 我尝试使用c.arro
我需要使用 pcolormesh 引入一个非常量 alpha 值(imshow 是先验的而不是可能的替代品,因为我需要对轴使用对数刻度——因此沿每个坐标的间距不规则)。 正在关注 this post
rcParams['legend.frameon'] = 'False' 是否有一种用给定颜色填充图例区域背景的简单方法。更具体地说,我不希望在图例区域看到网格,因为它会干扰文本阅读。 关键字 fra
我无法控制使用 Matplotlib 绘制的直方图的颜色和线条样式 hist功能与 stacked=True .对于单个非堆叠直方图,我没有问题: import pylab as P mu, sigm
我希望同一个对象被渲染两次,一次在屏幕上,一次在屏幕外。屏幕上的网格有一个几何体和一个 MeshLambertMaterial。该 Material 具有 vertexColors: THREE.Ve
上一个问题涉及使用 savefig() 以与屏幕上显示的相同的面色(背景色)保存,即: fig = plt.figure() fig.patch.set_facecolor('blue') fig.s
我正在使用 matplotlib 样式,当在组合框中选择样式时,我尝试动态更改样式。我使用的是 Matplotlib 2.2.3、Python 3.6.6、PyQt5、Windows 10。但是当我选
我正在使用 matplotlib plt.text 函数将文本框添加到我的直方图中。在 bbox 参数中,我指定了 boxstyle、facecolor、edgecolor 和 alpha .但是,当
我是一名优秀的程序员,十分优秀!