Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.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 从等高线图中完全删除轴_Python_Matplotlib_Plot_Contour - Fatal编程技术网

Python 从等高线图中完全删除轴

Python 从等高线图中完全删除轴,python,matplotlib,plot,contour,Python,Matplotlib,Plot,Contour,我正在尝试创建光栅数据的无轴等高线图。我设法创建了等高线图,但我不能完全删除轴。我可以使用plt.axis('off')关闭它们,但是axes空白仍然存在 我所做的: cnt = plt.contour(my_data) plt.clabel(cnt, inline=1, fontsize=10) plt.axis('off') 编辑 我的输出方法 plt.savefig(image_path, transparent=False, bbox_inches='tight', pad_inche

我正在尝试创建光栅数据的无轴等高线图。我设法创建了等高线图,但我不能完全删除轴。我可以使用
plt.axis('off')
关闭它们,但是axes空白仍然存在

我所做的:

cnt = plt.contour(my_data)
plt.clabel(cnt, inline=1, fontsize=10)
plt.axis('off')
编辑 我的输出方法

plt.savefig(image_path, transparent=False, bbox_inches='tight', pad_inches=0)
结果: 前
plt.axis('off')
plt.axis('off')之后

我对imshow也有同样的问题,但我已经设法解决了,但是同样的技术不能用于轮廓

那么,在没有轴和它们留下的空白的情况下,我如何绘制轮廓呢

编辑 所以我设法确定问题不在代码的“plt.axis('off')”部分。事实上,这条线确实完全删除了轴,当我调用plt.show()时它是可见的,但是当我尝试使用“plt.savefig()”保存绘图时,我得到了不需要的空白。为什么呢

我的代码和输出:

cnt = plt.contour(my_data)
plt.clabel(cnt, inline=1, fontsize=10)
plt.axis('off')
# no whitespaces
plt.show()
# whitespaces are present
plt.savefig(image_path, transparent=False, bbox_inches='tight', pad_inches=0)
可能的解决办法!? 我确实找到了一种方法,使我的图像几乎达到我想要的效果:

fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
plt.contour(data)
extent = ax.get_window_extent().transformed(fig.dpi_scale_trans.inverted())
plt.axis('off')
plt.savefig(image_path, transparent=False, bbox_inches=extent, pad_inches=0)

但是,我不能改变该地块的纵横比。我认为我不完全理解这个解决方案。

这实际上是由于
savefig
的默认设置造成的。图形可以具有透明背景(例如,尝试
fig.patch.set(facecolor='none');fig.canvas.print_png
),但在调用
plt.savefig
时,它会被覆盖

如果想要透明背景,则需要在调用
savefig
时指定
transparent=True
。否则,它将覆盖地物的当前背景色并将其设置为不透明白色

有关更多详细信息,请查看

例如:

import numpy as np
import matplotlib.pyplot as plt

data = np.random.random((5, 5))

fig, ax = plt.subplots()
cnt = ax.contour(data)
ax.clabel(cnt)
ax.axis('off')

fig.savefig('test.png', bbox_inches='tight', transparent=True)

当然,这在本页上看起来是相同的,但如果您在图像查看器中打开它,您会注意到它有一个合适的透明背景:


编辑

我可能误解了你的要求。如果您希望等高线图占据整个地物,而侧边没有空间放置记号标签等,则最容易以这种方式开始定义图

例如(请注意,这适用于任何类型的绘图,而不仅仅是等高线):


如果您仍然存在问题,可能是因为您使用的是
fig.savefig(…,bbox_inches='tight')
。这特别要求在保存的图像中包含记号标签,即使它们不可见且在地物边界之外

尝试类似于:

import numpy as np
import matplotlib.pyplot as plt

data = np.random.random((5, 5))

fig = plt.figure()
ax = fig.add_axes([0, 0, 1, 1])
cnt = ax.contour(data)
ax.clabel(cnt)
ax.axis('off')

fig.savefig('test.png')

我的理解是:你的意思是哪些空白被留下了?你是说边界上的白色填充物吗?我贴了一些不透明的图片,上面有问题。在它们上面(通过使用任何图像浏览器打开),您可以看到我所说的空白。然而,也有可能像我链接的imshow问题中那样,图像有一个小的填充。对我来说,最大的问题是仍然存在于轴标签和标记位置的大空白。在
plt.show()
之前,可能
plt.tight_layout()
(或者在交互模式打开的情况下,在最后)会解决问题?@iluengo-
tight_layout
会更改轴的大小。没别的了。DomagojHack遇到的问题是因为
savefig
在保存时覆盖了人物的面部颜色。@JoeKington-听起来他还想使用tight_layout();透明度问题还涉及到这样一个事实,即发布时不清楚发生了什么。是的,一开始你误解了这个问题。我知道如何创建透明和非透明版本的图像。我提到透明度是因为在透明图像上,在等高线图上很难发现空白。所以这个答案的第一部分并不是困扰我的。然而,在尝试了编辑你的答案后,我得到了与第一种方法相同的结果。尽管如此,如果我不调用“ax.axis(“off”)”,轴标签和记号所在位置上有大空格的图像仍然会消失。我确定我使用的“plt.savefig”存在问题。我将进一步编辑我的Q。@DomagojHack-您是否使用
fig.savefig(…,bbox_inches='tight')
?如果是这样,请移除
bbox\u inches='tight'
,并将定义轴的部分保留为填充整个图形(
fig.add\u轴([0,0,1,1])
bbox\u inches='tight'
将强制
savefig
包含轴刻度,即使它们在图形边界之外且不可见。谢谢!这就是我现在看到的问题。
import numpy as np
import matplotlib.pyplot as plt

data = np.random.random((5, 5))

fig = plt.figure()
ax = fig.add_axes([0, 0, 1, 1])
cnt = ax.contour(data)
ax.clabel(cnt)
ax.axis('off')

fig.savefig('test.png')