Làm thế nào để bạn thay đổi kích thước của hình vẽ bằng matplotlib?
fig, ax = plt.subplots(figsize=(20, 10))
fig = plt.gcf()
-> fig.set_size_inches(11,8)
để tránh sự nhầm lẫn một lần và mãi mãi.
Làm thế nào để bạn thay đổi kích thước của hình vẽ bằng matplotlib?
fig, ax = plt.subplots(figsize=(20, 10))
fig = plt.gcf()
-> fig.set_size_inches(11,8)
để tránh sự nhầm lẫn một lần và mãi mãi.
Câu trả lời:
hình cho bạn biết chữ ký cuộc gọi:
from matplotlib.pyplot import figure
figure(num=None, figsize=(8, 6), dpi=80, facecolor='w', edgecolor='k')
figure(figsize=(1,1))
sẽ tạo ra một hình ảnh từng inch một, sẽ là 80 x 80 pixel trừ khi bạn cũng đưa ra một đối số dpi khác nhau.
show()
để tạo cửa sổ bật lên, bạn cần gọi figure(num=1,...)
trước khi vẽ bất cứ thứ gì - pyplot / pylab tạo ra một hình ngay khi bạn vẽ một cái gì đó, và kích thước của cửa sổ bật lên xuất hiện được cố định tại thời điểm này.
Nếu bạn đã có con số được tạo, bạn có thể nhanh chóng làm điều này:
fig = matplotlib.pyplot.gcf()
fig.set_size_inches(18.5, 10.5)
fig.savefig('test2png.png', dpi=100)
Để tuyên truyền thay đổi kích thước cho một cửa sổ gui hiện có thêm forward=True
fig.set_size_inches(18.5, 10.5, forward=True)
imshow
, bây giờ tôi đang sử dụng mã này ngay sau khi loại bỏ khoảng trống xung quanh khu vực vẽ plt.subplots_adjust(left=0.0, right=1.0, bottom=0.0, top=1.0)
.
fig.set_dpi(100)
.
Lưu ý khấu hao:
Theo hướng dẫn chính thức của Matplotlib , việc sử dụngpylab
mô-đun không còn được khuyến nghị. Vui lòng xem xét sử dụngmatplotlib.pyplot
mô-đun thay thế, như được mô tả bởi câu trả lời khác này .
Sau đây có vẻ hoạt động:
from pylab import rcParams
rcParams['figure.figsize'] = 5, 10
Điều này làm cho chiều rộng của hình là 5 inch và chiều cao của nó là 10 inch .
Lớp Hình sau đó sử dụng giá trị này làm giá trị mặc định cho một trong các đối số của nó.
fig.set_size_inches(18.5, 10.5, forward=True)
đã làm việc.
Ngoài ra còn có cách giải quyết này trong trường hợp bạn muốn thay đổi kích thước mà không sử dụng môi trường hình. Vì vậy, trong trường hợp bạn đang sử dụng plt.plot()
chẳng hạn, bạn có thể đặt một bộ dữ liệu có chiều rộng và chiều cao.
import matplotlib.pyplot as plt
plt.rcParams["figure.figsize"] = (20,3)
Điều này rất hữu ích khi bạn vẽ đồ thị nội tuyến (ví dụ với IPython Notebook). Như @asamaier nhận thấy tốt hơn là không đặt câu lệnh này trong cùng một ô của câu lệnh nhập khẩu.
Bộ figsize
tuple chấp nhận inch, vì vậy nếu bạn muốn đặt nó theo centimet, bạn phải chia chúng cho 2,54, hãy xem câu hỏi này .
plt.rcParams["figure.figsize"] = (20,3)
trong một tế bào phụ. Khi tôi gọi nó trong cùng một ô với câu lệnh nhập, nó sẽ bị bỏ qua.
Vui lòng thử một mã đơn giản như sau:
from matplotlib import pyplot as plt
plt.figure(figsize=(1,1))
x = [1,2,3]
plt.plot(x, x)
plt.show()
Bạn cần đặt kích thước hình trước khi vẽ.
atplotlib.pyplot.figure
, mà những người khác không nói rõ ràng. Tôi tiếp tục thử những thứ như matplotlib.figure
vàmatplotlib.figure.Figure
plt.figure(figsize=(1,1))
là mấu chốt di chuyển. Cảm ơn bạn.
Trong trường hợp bạn đang tìm cách thay đổi kích thước hình trong Pandas , bạn có thể làm, ví dụ:
df['some_column'].plot(figsize=(10, 5))
nơi df
là một dataframe Pandas. Hoặc, để sử dụng hình hoặc trục hiện có
fig, ax = plt.subplots(figsize=(10,5))
df['some_column'].plot(ax=ax)
Nếu bạn muốn thay đổi cài đặt mặc định, bạn có thể làm như sau:
import matplotlib
matplotlib.rc('figure', figsize=(10, 5))
Liên kết đầu tiên trong Google cho 'matplotlib figure size'
là Điều chỉnh kích thước ( bộ đệm Google của trang ).
Đây là một kịch bản thử nghiệm từ trang trên. Nó tạo test[1-3].png
các tệp có kích thước khác nhau của cùng một hình ảnh:
#!/usr/bin/env python
"""
This is a small demo file that helps teach how to adjust figure sizes
for matplotlib
"""
import matplotlib
print "using MPL version:", matplotlib.__version__
matplotlib.use("WXAgg") # do this before pylab so you don'tget the default back end.
import pylab
import numpy as np
# Generate and plot some simple data:
x = np.arange(0, 2*np.pi, 0.1)
y = np.sin(x)
pylab.plot(x,y)
F = pylab.gcf()
# Now check everything with the defaults:
DPI = F.get_dpi()
print "DPI:", DPI
DefaultSize = F.get_size_inches()
print "Default size in Inches", DefaultSize
print "Which should result in a %i x %i Image"%(DPI*DefaultSize[0], DPI*DefaultSize[1])
# the default is 100dpi for savefig:
F.savefig("test1.png")
# this gives me a 797 x 566 pixel image, which is about 100 DPI
# Now make the image twice as big, while keeping the fonts and all the
# same size
F.set_size_inches( (DefaultSize[0]*2, DefaultSize[1]*2) )
Size = F.get_size_inches()
print "Size in Inches", Size
F.savefig("test2.png")
# this results in a 1595x1132 image
# Now make the image twice as big, making all the fonts and lines
# bigger too.
F.set_size_inches( DefaultSize )# resetthe size
Size = F.get_size_inches()
print "Size in Inches", Size
F.savefig("test3.png", dpi = (200)) # change the dpi
# this also results in a 1595x1132 image, but the fonts are larger.
Đầu ra:
using MPL version: 0.98.1
DPI: 80
Default size in Inches [ 8. 6.]
Which should result in a 640 x 480 Image
Size in Inches [ 16. 12.]
Size in Inches [ 16. 12.]
Hai lưu ý:
Các ý kiến mô-đun và đầu ra thực tế khác nhau.
Câu trả lời này cho phép dễ dàng kết hợp cả ba hình ảnh trong một tệp hình ảnh để thấy sự khác biệt về kích thước.
fig = plt.figure() default_size = fig.get_size_inches() fig.set_size_inches( (default_size[0]*2, default_size[1]*2) )
Bạn chỉ có thể sử dụng (từ matplotlib.figure.Figure ):
fig.set_size_inches(width,height)
Kể từ Matplotlib 2.0.0, các thay đổi đối với khung vẽ của bạn sẽ hiển thị ngay lập tức, khi forward
từ khóa mặc địnhTrue
.
Nếu bạn muốn chỉ thay đổi chiều rộng hoặc chiều cao thay vì cả hai, bạn có thể sử dụng
fig.set_figwidth(val)
hoặc là fig.set_figheight(val)
Chúng cũng sẽ ngay lập tức cập nhật canvas của bạn, nhưng chỉ trong Matplotlib 2.2.0 trở lên.
Bạn cần chỉ định forward=True
rõ ràng để cập nhật trực tiếp khung vẽ của bạn trong các phiên bản cũ hơn những gì được chỉ định ở trên. Lưu ý rằng set_figwidth
và các set_figheight
chức năng không hỗ trợ forward
tham số trong các phiên bản cũ hơn Matplotlib 1.5.0.
import matplotlib.pyplot as plt
plt.figure(figsize=(20,10))
plt.plot(x,y) ## This is your plot
plt.show()
Bạn cũng có thể dùng:
fig, ax = plt.subplots(figsize=(20, 10))
Công việc này tốt cho tôi:
from matplotlib import pyplot as plt
F = plt.gcf()
Size = F.get_size_inches()
F.set_size_inches(Size[0]*2, Size[1]*2, forward=True) # Set forward to True to resize window along with plot in figure.
plt.show() # or plt.imshow(z_array) if using an animation, where z_array is a matrix or numpy array
Điều này cũng có thể giúp: http://matplotlib.1069221.n5.nabble.com/Resizing-figure-windows-td11424.html
Để tăng kích thước của hình của bạn N lần, bạn cần chèn cái này ngay trước pl.show ():
N = 2
params = pl.gcf()
plSize = params.get_size_inches()
params.set_size_inches( (plSize[0]*N, plSize[1]*N) )
Nó cũng hoạt động tốt với máy tính xách tay ipython.
Vì Matplotlib không thể sử dụng hệ thống số liệu một cách tự nhiên, nếu bạn muốn chỉ định kích thước của hình của mình theo một đơn vị chiều dài hợp lý như centimet, bạn có thể thực hiện các thao tác sau (mã từ gns-ank ):
def cm2inch(*tupl):
inch = 2.54
if isinstance(tupl[0], tuple):
return tuple(i/inch for i in tupl[0])
else:
return tuple(i/inch for i in tupl)
Sau đó, bạn có thể sử dụng:
plt.figure(figsize=cm2inch(21, 29.7))
Tổng quát hóa và đơn giản hóa câu trả lời của psihodelia. Nếu bạn muốn thay đổi kích thước hiện tại của hình theo một yếu tốsizefactor
import matplotlib.pyplot as plt
# here goes your code
fig_size = plt.gcf().get_size_inches() #Get current size
sizefactor = 0.8 #Set a zoom factor
# Modify the current size by the factor
plt.gcf().set_size_inches(sizefactor * fig_size)
Sau khi thay đổi kích thước hiện tại, có thể bạn phải tinh chỉnh bố cục của ô phụ . Bạn có thể làm điều đó trong GUI của cửa sổ hình hoặc bằng lệnh subplots_adjust
Ví dụ,
plt.subplots_adjust(left=0.16, bottom=0.19, top=0.82)
Một tùy chọn khác, để sử dụng hàm RC () trong matplotlib (đơn vị là inch)
import matplotlib
matplotlib.rc('figure', figsize=[10,5])
Bạn trực tiếp thay đổi kích thước hình bằng cách sử dụng
plt.set_figsize(figure=(10, 10))
pyplot
không có bất kỳ phương pháp nào được đặt tên set_figsize
.
plt.figure(figsize=(20,10))