你如何改变用matplotlib绘制的图形的大小?
我是Python和Matplotlib的新手,我想简单地将colormap应用于图像并编写生成的图像,而不使用轴,标签,标题或通常由matplotlib自动添加的任何内容.这是我做的:
def make_image(inputname,outputname):
data = mpimg.imread(inputname)[:,:,0]
fig = plt.imshow(data)
fig.set_cmap('hot')
fig.axes.get_xaxis().set_visible(False)
fig.axes.get_yaxis().set_visible(False)
plt.savefig(outputname)
Run Code Online (Sandbox Code Playgroud)
它成功地移除了图形的轴,但保存的图形呈现白色填充和实际图像周围的框架.如何删除它们(至少是白色填充)?谢谢
我正在努力处理matplotlib中的情节边距.我使用下面的代码生成我的图表:
plt.imshow(g)
c = plt.colorbar()
c.set_label("Number of Slabs")
plt.savefig("OutputToUse.png")
Run Code Online (Sandbox Code Playgroud)
但是,我得到了一个输出数字,在图的两侧有很多空白区域.我搜索了谷歌并阅读matplotlib文档,但我似乎无法找到如何减少这一点.
说我的图像大小为3841 x 7195像素.我想将图中的内容保存到磁盘,从而产生一个我指定的确切大小的图像(以像素为单位).
没有轴,没有标题.只是图像.我个人并不关心DPI,因为我只想指定图像在磁盘屏幕中所占的大小(以像素为单位).
我已经阅读了其他 主题,他们似乎都转换为英寸,然后以英寸为单位指定数字的尺寸,并以某种方式调整dpi.我想避免处理像素到英寸转换可能导致的精度损失.
我尝试过:
w = 7195
h = 3841
fig = plt.figure(frameon=False)
fig.set_size_inches(w,h)
ax = plt.Axes(fig, [0., 0., 1., 1.])
ax.set_axis_off()
fig.add_axes(ax)
ax.imshow(im_np, aspect='normal')
fig.savefig(some_path, dpi=1)
Run Code Online (Sandbox Code Playgroud)
没有运气(Python抱怨宽度和高度必须都低于32768(?))
一切从我所看到的,matplotlib需要到指定的数字大小inches和dpi,但我只关心像素的数字发生在磁盘上.我怎样才能做到这一点?
澄清:我正在寻找一种方法matplotlib,而不是与其他图像保存库.
如何在不显示轴的情况下制作3D绘图?
在绘制三维绘图时,Matplotlib不仅绘制x,y和z轴,还在xy,yz和xz平面上绘制浅灰色网格.我想绘制一个"自由浮动"的3D图,没有这些元素.
我试过的东西:
# Doesn't work; this hides the plot, not the axes
my_3d_axes.set_visible(False)
# Doesn't do anything. Also, there's no get_zaxis() function.
my_3d_axes.get_xaxis().set_visible(False)
my_3d_axes.get_yaxis().set_visible(False)
Run Code Online (Sandbox Code Playgroud) 我正在生成一个有两个子图的屏幕图:一个是图像,另一个是图形.图中的边距非常大.
如何调整数字周围的边距?
我搜索的大多数问题涉及保存图像(bbox看起来很完美),并使用轴而不是子图进行绝对定位.
这是我用来生成图形的代码:
def __init__(self, parent):
wx.Panel.__init__(self, parent)
...
self.figure, (self.picture, self.intensity) = \
plt.subplots(nrows=2, figsize=(12, 5))
self.figure.set_dpi(80)
#self.figure.subplots_adjust(left=0.1, right=0.9, top=0.9, bottom=0.1)
#self.picture.imshow(np.random.uniform()) #size=(5, 50)))
self.intensity.plot(np.random.random()) #size=641))
self.intensity.autoscale(axis='x', tight=True)
Run Code Online (Sandbox Code Playgroud) 当我绘制一个图形时matplotlib如何保存它而没有额外的边距?通常当我保存为
plt.savefig("figure.png") # or .pdf
Run Code Online (Sandbox Code Playgroud)
我得到了一些利润:
例:
import matplotlib.pyplot as plt
import networkx as nx
G=nx.Graph()
G.add_edge('a','b',weight=1)
G.add_edge('a','c',weight=1)
G.add_edge('a','d',weight=1)
G.add_edge('a','e',weight=1)
G.add_edge('a','f',weight=1)
G.add_edge('a','g',weight=1)
pos=nx.spring_layout(G)
nx.draw_networkx_nodes(G,pos,node_size=1200,node_shape='o',node_color='0.75')
nx.draw_networkx_edges(G,pos,
width=2,edge_color='b')
plt.axis('off')
plt.savefig("degree.png", bbox_inches="tight")
plt.show()
Run Code Online (Sandbox Code Playgroud)
更新2:
这些空间设置在轴内.如果我删除,这很清楚plt.axis('off')
所以我认为有一些技巧可以用于Networkx包.
我正在尝试以其真实尺寸渲染图像(未缩放或拉伸),并且使用 matplotlib 执行此操作的最简单方法似乎是figimage.
但是,当我尝试在 Jupyter 笔记本中使用它时,该图没有显示。其他图显示良好,这似乎只影响figimage:
正如您所看到的,第一个图显示得很好,但第二个图则不然。我究竟做错了什么?
当我在 IPython shell 中运行以下代码时,该图按预期显示,所以可能是我的 Jupyter 设置有问题?
import matplotlib
from matplotlib import pyplot as plt
import numpy as np
x = np.linspace(0, 2*np.pi, 500)
plt.plot(x, np.sin(x))
plt.show()
data = np.random.random((500,500))
plt.figimage(data)
plt.show()
Run Code Online (Sandbox Code Playgroud) 我想从wav文件中获取一个频谱图,然后将其保存为png,但是我只需要图像的内容(而不是轴或其他任何东西)。我遇到了
Matplotlib绘制的这些问题:删除轴,图例和空白区域
scipy:没有框架,轴,仅内容的savefig
我也阅读了Matplotlib文档,但似乎无用,因此上述问题的答案已过时或我做错事是因为简单
plt.savefig('out.png', bbox_inches='tight', pad_inches=0)
不做我想实现的目标。最初,我尝试遵循此指南,但是代码崩溃了。然后,我尝试了这种方法,但是由于它已经过时,因此我对其进行了一些修改:
import matplotlib.pyplot as plt
from scipy.io import wavfile
import numpy as np
def graph_spectrogram(wav_file):
rate, data = wavfile.read(wav_file)
pxx, freqs, bins, im = plt.specgram(x=data, Fs=rate, noverlap=384, NFFT=512)
plt.axis('off')
plt.savefig('sp_xyz.png', bbox_inches='tight', dpi=300, frameon='false')
if __name__ == '__main__': # Main function
graph_spectrogram('...')
Run Code Online (Sandbox Code Playgroud)
这就是我得到的:
也许它不可见,但是内容周围有一个白色边框(从最大到最小):左,下,上,右。我想要相同的图像,但只包含内容,没有其他内容。我该如何实现?我使用python 3.6和Matplotlib 2.0.2。
我正在寻找一种使用 matplotlib 进行无缝地图图像绘制的解决方案。当前的代码运行良好且稳定,但是,它在左侧和底部留下了空白。我想删除这个空白,但不知道如何。
我的示例代码:
import geopandas
from seaborn import despine
from pandas import read_csv
import matplotlib.pyplot as plt
# read data and shapefile
geo_path = 'shapefiles/ne_10m_admin_0_countries.shp'
df = read_csv('UNpopEstimates2100.csv')
world = geopandas.read_file(geo_path)
# specifiy what is to be plotted
cm = 'Greys'
world['2015'] = df['2015']
# set plot environment
fig = plt.figure()
ax = fig.add_axes([0, 0, 1, 1])
ax.axis('off')
plt.subplots_adjust(left=0, right=1, bottom=0, top=1)
world.plot(ax=ax, column='2015', cmap=cm, scheme='quantiles')
plt.savefig('sample.png', bbox_inches='tight', tight_layout=True, pad_inches=0, frameon=None)
Run Code Online (Sandbox Code Playgroud)
matplotlib ×10
python ×9
plot ×4
geopandas ×1
graph ×1
jupyter ×1
networkx ×1
scipy ×1
spectrogram ×1