Câu hỏi Làm thế nào để bạn thay đổi kích thước của các con số được vẽ bằng matplotlib?


Làm thế nào để bạn thay đổi kích thước của hình vẽ với matplotlib?


1107
2017-12-01 21:24


gốc


plt.figure(figsize=(20,10)) - StackG
HOẶC LÀ fig, ax = plt.subplots(figsize=(20, 10)) - alexw
Nghĩ rằng kích thước hình là pixel, tôi đã chỉ định (800,600) và chương trình bị lỗi! Xin lưu ý rằng đơn vị là inch. - Raja
@alexw là tài liệu này? - liang
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. - Ufos


Các câu trả lời:


nhân vật 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 inch-by-inch, mà sẽ là 80-by-80 pixel, trừ khi bạn cũng đưa ra một đối số dpi khác nhau.


675
2018-03-12 12:41



Nếu bạn đã tạo ra con số, nói rằng đó là 'hình 1' (đó là mặc định khi bạn đang sử dụng pyplot), bạn có thể sử dụng hình (num = 1, figsize = (8, 6), ...) để thay đổi kích thước của nó vv Nếu bạn đang sử dụng pyplot / pylab và show() để tạo cửa sổ bật lên, bạn cần gọi figure(num=1,...)  trước bạn vẽ đồ vật gì đó - pyplot / pylab tạo ra một hình ngay sau khi bạn vẽ một cái gì đó, và kích thước của cửa sổ bật lên dường như được cố định tại thời điểm này. - drevicko
Tôi cảm thấy câu trả lời của bạn sẽ tốt hơn nếu bạn loại bỏ các đối số mặc định. Nó làm giảm tỷ số tín hiệu thành nhiễu không cần thiết. - frmsaul
Điều này có nghĩa là nếu bạn đặt DPI thành 1, thì figsize trở thành đơn vị pixel thay vì đơn vị inch? Điều này sẽ hữu ích hơn khi sử dụng matplotlib trên giao diện web và GUI. - CMCDragonkai
với figsize (1,1) bạn sẽ có một tỷ lệ trong hình ảnh như 1: 1? bởi vì tất cả các biểu đồ hình tròn của tôi đều hiển thị hình bầu dục và cách duy nhất tôi tìm thấy để làm cho chúng tròn là bằng cách sử dụng plot.axis ("bằng"). họ sẽ có tác dụng tương tự hoặc họ cư xử khác nhau? - Breno Baiardi
@BrenoBaiardi Câu hỏi này là về kích thước hình. Các trục ở trên cùng của hình có thể vẫn có tỷ lệ khung hình không bằng nhau ngay cả khi hình tổng thể là 1: 1 và thậm chí nếu hộp trục là 1: 1, dữ liệu có thể được thu nhỏ theo các hướng x và y. Vì vậy, không, lệnh đó sẽ không đảm bảo tỷ lệ co bằng nhau. - Jouni K. Seppänen


Nếu bạn đã có hình đượ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 thành cửa sổ gui hiện có, hãy thêm forward=True

fig.set_size_inches(18.5, 10.5, forward=True)

531
2017-11-29 17:30



Giải quyết cho tôi một vấn đề với imshow, bây giờ tôi đang sử dụng mã này ngay sau khi loại bỏ không gian xung quanh khu vực vẽ đồ thị với plt.subplots_adjust(left=0.0, right=1.0, bottom=0.0, top=1.0). - heltonbiker
Tương tự, bạn có thể chạy fig.set_dpi(100). - Erik Shilts
@drevicko Bạn chỉ cần thêm forward=True đến set_size_inches gọi điện. - tacaswell


Ghi chú không dùng nữa:
  Theo hướng dẫn chính thức của Matplotlib, sử dụng pylab mô-đun không còn được khuyến nghị nữa. Vui lòng xem xét sử dụng matplotlib.pyplot thay vào đó, như được mô tả bởi câu trả lời khác này.

Những điều sau đây dường như 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 lớp này làm giá trị mặc định cho một trong các đối số của nó.


259
2017-12-01 21:28



Điều này cũng hoạt động độc đáo ở đầu của một máy tính xách tay iPython, trong đó (cho - pylab = inline) có rcParams đã được nhập khẩu ở cấp cao nhất. - nealmcb
Điều này đã không làm việc trên máy tính Windows của tôi với giao diện OO để phụ trợ pyplot và Qt. fig.set_size_inches(18.5, 10.5, forward=True) đã làm việc. - Bennett Brown
Câu trả lời này hiện đang được thảo luận Meta - Mischa


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 phải thiết lập kích thước hình trước khi bạn vẽ.


154
2018-06-06 03:24



Câu trả lời này cho tôi biết rằng đó là matplotlib.pyplot.figuremà 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 - Lyndon White
"_tkinter.TclError: không đủ bộ nhớ trống cho bộ đệm hình ảnh" - Cerin
plt.figure(figsize=(1,1)) là điểm mấu chốt. Cảm ơn bạn. - ximiki
Điều này làm việc cho tôi - xssChauhan


SỬ DỤNG plt.rcParams

Cũng có cách giải quyết khác trong trường hợp bạn muốn thay đổi kích thước mà không cần 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() ví dụ.

import matplotlib.pyplot as plt
plt.rcParams["figure.figsize"] = (20,3)

Điều này rất hữu ích khi bạn vẽ nội tuyến (ví dụ: với Máy tính xách tay IPython).

Chuyển đổi thành cm

Các figsize tuple chấp nhận inch vì vậy nếu bạn muốn đặt nó trong cm, bạn phải chia chúng cho 2,54 có một cái nhìn câu hỏi này.


126
2018-01-18 10:55



Xuất sắc! Cũng hữu ích cho việc thiết lập nó một lần và vẽ nhiều lần. - automorphic
Đối với một số lý do, có vẻ như điều này không còn hoạt động trong máy tính xách tay Jupyter (nhưng được sử dụng để). - Ray
@Ray Bạn có thể viết phiên bản sổ ghi chép Jupyter của bạn và hành vi cho tôi nó hoạt động không - G M
@GM thời gian qua tôi đã thử nghiệm, đó là Jupyter phiên bản 4.3.0 và Python 3.6.2 từ Anaconda, trên Windows 10 và Google Chrome 63.0.3239.84. - Ray
Để làm cho nó hoạt động, tôi cần phải gọi plt.rcParams["figure.figsize"] = (20,3) trong một ô phụ. Khi tôi gọi nó trong cùng một ô như câu lệnh import, nó bị bỏ qua. - asmaier


Liên kết đầu tiên trong Google cho 'matplotlib figure size' Là AdjustingImageSize (Bộ nhớ cache của Google của trang).

Đây là một kịch bản thử nghiệm từ trang trên. Nó tạo ra 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 ghi chú:

  1. Các bình luận mô-đun và đầu ra thực tế khác nhau.

  2. Câu trả lời này cho phép dễ dàng kết hợp tất 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.


67
2017-12-02 16:01



Mỗi lần tôi đang cố gắng nhớ lại làm thế nào để làm điều đó tôi kết thúc trong bài viết này. Vì vậy, đây là mã tôi thường tìm kiếm: fig = plt.figure() default_size = fig.get_size_inches() fig.set_size_inches( (default_size[0]*2, default_size[1]*2) ) - yauheni_selivonchyk


Trong trường hợp bạn đang tìm kiếm một 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))

Ở đâu df là một khung dữ liệu Pandas. Nếu bạn muốn thay đổi cài đặt mặc định, bạn có thể thực hiện các thao tác sau:

import matplotlib

matplotlib.rc('figure', figsize=(10, 5))

41
2017-09-29 12:54





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 canvas của bạn sẽ hiển thị ngay lập tức, vì forward từ khóa mặc định là True.

Nếu bạn muốn thay đổi chiều rộng hoặc là 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)

Những điều này 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 và mới hơn.

Đối với các phiên bản cũ hơn

Bạn cần chỉ định forward=True một cách rõ ràng để cập nhật trực tiếp canvas 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à 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.


20
2017-10-30 15:23





Thử nhận xét ra fig = ... hàng

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt

N = 50
x = np.random.rand(N)
y = np.random.rand(N)
area = np.pi * (15 * np.random.rand(N))**2

fig = plt.figure(figsize=(18, 18))
plt.scatter(x, y, s=area, alpha=0.5)
plt.show()

18
2018-03-14 08:22





Để tăng kích thước của con số N lần bạn cần chèn nó 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.


12
2017-10-30 10:38