我需要拍摄一张图像并在一些过程后保存.当我显示它时,图形看起来很好,但是当我保存图形时,我在保存的图像周围有一些空白区域.我试过方法的'tight'选项savefig,也没用.代码:
  import matplotlib.image as mpimg
  import matplotlib.pyplot as plt
  fig = plt.figure(1)
  img = mpimg.imread(path)
  plt.imshow(img)
  ax=fig.add_subplot(1,1,1)
  extent = ax.get_window_extent().transformed(fig.dpi_scale_trans.inverted())
  plt.savefig('1.png', bbox_inches=extent)
  plt.axis('off') 
  plt.show()
我试图通过在图上使用NetworkX绘制基本图并保存它.我意识到没有图形它可以工作,但是当添加图形时,我会在保存的图像周围获得空白区域;
import matplotlib.image as mpimg
import matplotlib.pyplot as plt
import networkx as nx
G = nx.Graph()
G.add_node(1)
G.add_node(2)
G.add_node(3)
G.add_edge(1,3)
G.add_edge(1,2)
pos = {1:[100,120], 2:[200,300], 3:[50,75]}
fig = plt.figure(1)
img = mpimg.imread("C:\\images\\1.jpg")
plt.imshow(img)
ax=fig.add_subplot(1,1,1)
nx.draw(G, pos=pos)
extent = ax.get_window_extent().transformed(fig.dpi_scale_trans.inverted())
plt.savefig('1.png', bbox_inches = extent)
plt.axis('off') 
plt.show()
下面的代码会在子图之间产生间隙.如何消除子图之间的间隙并使图像成为紧密的网格?
import matplotlib.pyplot as plt
for i in range(16):
    i = i + 1
    ax1 = plt.subplot(4, 4, i)
    plt.axis('on')
    ax1.set_xticklabels([])
    ax1.set_yticklabels([])
    ax1.set_aspect('equal')
    plt.subplots_adjust(wspace=None, hspace=None)
plt.show()
这可能是一个微不足道的问题,但我试图用matplotlib和x轴上的旋转文本绘制条形图.我正在使用的代码如下所示:
fig = plt.figure()
x_labels_list = []
for i in range(0, pow(2, N)):
    x_labels_list.append(str(f(i)))  # The function f() converts i to a binary string
ax = plt.subplot(111)
width = 1.0
bins = map(lambda x: x-width, range(1,pow(2,N)+1))
ax.bar(bins, my_data, width=width)
ax.set_xticks(map(lambda x: x-width/2, range(1,pow(2,N)+1)))
ax.set_xticklabels(x_labels_list, rotation=90, rotation_mode="anchor", ha="right")
它工作得很好,但是我在x轴的右边获得了一个恼人的空白区域,如下图中的红色椭圆所示:

你知道我怎么能把它删除吗?提前致谢!
在Pandas中为数据帧生成PDF的有效方法是什么?
生成图形以保存到 pdf 文件时,我想调整图形相对于页面边缘的位置,例如沿所有边添加英寸边距。据我所知,这样做的解决方案(例如,在这个问题中)要么:
constrained_layout模式 -plt.subplots_adjust()在创建图形之后但在fig.savefig()弄乱受约束的布局之前应用bbox_inches="tight"或pad=-1似乎没有做任何有意义的事情有没有一种直接的方法来调整受限布局图形的外部边距?
例如:
fig = plt.figure(constrained_layout=True, figsize=(11, 8.5))
page_grid = gridspec.GridSpec(nrows=2, ncols=1, figure=fig)
# this doesn't appear to do anything with constrained_layout=True
page_grid.update(left=0.2, right=0.8, bottom=0.2, top=0.8)
top_row_grid = gridspec.GridSpecFromSubplotSpec(1, 3, subplot_spec=page_grid[0])
for i in range(3):
    ax = fig.add_subplot(top_row_grid[:, i], aspect="equal")
n_bottom_row_plots = 10
qc_grid = gridspec.GridSpecFromSubplotSpec(1, n_bottom_row_plots, subplot_spec=page_grid[1])
for i, metric in enumerate(range(n_bottom_row_plots)):
    ax = fig.add_subplot(qc_grid[:, i])
    plt.plot(np.arange(5), np.arange(5))
fig.suptitle("my big label", fontweight="bold", …我已经习惯了使用matlab,现在正试图让移位matplotlib和numpy.matplotlib中是否有一种方法是您正在绘制的图像占据整个图形窗口.
import numpy as np
import matplotlib.pyplot as plt
# get image im as nparray
# ........
plt.figure()
plt.imshow(im)
plt.set_cmap('hot')
plt.savefig("frame.png")
我希望图像保持其纵横比并缩放到图形的大小......所以当我保存它时,它与输入图形完全相同,并且它完全被图像覆盖.
谢谢.
我知道如何增加两边的边距matplotlib:
import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots()
ax.set_xmargin(0.3)   
ax.plot(range(10), np.random.rand(10))
plt.show()
但是,我只想在右侧有一个边距:类似于ax.set_xmargin(left=0.0, right=0.3). 那可能吗?我无法手动设置轴限制,因为绘图是动画的,并且每一步数据都在变化。
我在网上看到很多帖子和答案试图回答这个问题。
然而,使用bbox_inches = 'tight'图例消失了。
这是我的数字之一:

由于我在图框之外有图例,因此我想仅删除顶部和底部的空白区域。
有人知道如何至少删除顶部空白吗?
多谢!