Bagaimana anda mengubah ukuran dari gambar yang diambil dengan matplotlib?
gambar memberitahu anda panggilan signature:
from matplotlib.pyplot import figure
figure(num=None, figsize=(8, 6), dpi=80, facecolor='w', edgecolor='k')
angka(figsize=(1,1))
akan membuat inch-oleh-inch gambar, yang akan menjadi 80-oleh-80 piksel kecuali jika anda juga memberikan dpi yang berbeda argumen.
Jika anda've sudah punya figure yang dibuat, anda dapat dengan cepat melakukan hal ini:
fig = matplotlib.pyplot.gcf()
fig.set_size_inches(18.5, 10.5)
fig.savefig('test2png.png', dpi=100)
Untuk menyebarkan perubahan ukuran yang ada gui jendela add maju=True
fig.set_size_inches(18.5, 10.5, forward=True)
Bantahan catatan: Sesuai official Matplotlib panduan, penggunaan
pylab
modul ini tidak lagi dianjurkan. Silakan mempertimbangkan untuk menggunakanmatplotlib.pyplot
modul sebaliknya, seperti yang dijelaskan oleh ini jawaban lain.
Berikut ini tampaknya bekerja:
from pylab import rcParams
rcParams['figure.figsize'] = 5, 10
Hal ini membuat angka's lebar 5 inci, dan tinggi 10 inci.
Sosok kelas kemudian menggunakan ini sebagai nilai default untuk salah satu argumen.
Ada juga pemecahan masalah ini dalam kasus anda ingin mengubah ukuran tanpa menggunakan angka lingkungan. Jadi dalam kasus anda menggunakan plt.plot()
misalnya, anda dapat mengatur sebuah tuple dengan lebar dan tinggi.
import matplotlib.pyplot as plt
plt.rcParams["figure.figsize"] = (20,3)
Hal ini sangat berguna ketika anda merencanakan inline (misalnya dengan IPython Notebook). Seperti @asamaier perhatikan adalah lebih baik untuk tidak menempatkan pernyataan ini dalam sel yang sama dari impor pernyataan.
The figsize
tupel menerima inci jadi jika anda ingin mengaturnya dalam sentimeter anda harus membagi mereka dengan 2,54 melihat ke pertanyaan.
Link pertama di Google untuk 'matplotlib gambar ukuran'
adalah AdjustingImageSize (Google cache page).
Berikut ini's test script dari halaman di atas. Menciptakan test[1-3].png
file dari ukuran yang berbeda dari gambar yang sama:
#!/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.
Output:
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.]
Dua catatan:
Modul komentar dan output aktual berbeda.
Jawaban memungkinkan mudah untuk menggabungkan semua tiga gambar dalam satu file gambar untuk melihat perbedaan dalam ukuran.
Dalam kasus anda'kembali mencari cara untuk mengubah ukuran gambar di Panda, bisa anda lakukan misalnya:
df['some_column'].plot(figsize=(10, 5))
di mana df
adalah Panda dataframe. Atau, untuk menggunakan angka yang ada atau sumbu
fig, ax = plt.subplots(figsize=(10,5))
df['some_column'].plot(ax=ax)
Jika anda ingin mengubah pengaturan default, anda bisa melakukan hal berikut:
import matplotlib
matplotlib.rc('figure', figsize=(10, 5))
Anda hanya dapat menggunakan (dari matplotlib.gambar.Angka):
fig.set_size_inches(width,height)
Sebagai Matplotlib 2.0.0, perubahan ke kanvas anda akan terlihat segera, sebagai maju
kata kunci default Benar
.
Jika anda ingin hanya mengubah lebar atau tinggi bukannya kedua, anda dapat menggunakan
ara.set_figwidth(val)
atau ara.set_figheight(val)
Ini juga akan segera update kanvas anda, tetapi hanya dalam Matplotlib 2.2.0 dan yang lebih baru.
Anda perlu menentukan maju=True
secara eksplisit dalam rangka untuk hidup-update kanvas anda dalam versi yang lebih tua dari apa yang ditentukan di atas. Perhatikan bahwa set_figwidth
dan set_figheight
fungsi yang tidak mendukung maju
parameter dalam versi yang lebih tua dari Matplotlib 1.5.0.
Cobalah mengomentari keluar ara = ...
line
%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()
Untuk meningkatkan ukuran gambar N kali anda harus memasukkan ini sebelum anda pl.show():
N = 2
params = pl.gcf()
plSize = params.get_size_inches()
params.set_size_inches( (plSize[0]*N, plSize[1]*N) )
Ia juga bekerja dengan baik dengan ipython notebook.
Ini bekerja baik untuk saya:
from matplotlib import pyplot as plt
F = 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
Ini juga mungkin membantu: http://matplotlib.1069221.n5.nabble.com/Resizing-figure-windows-td11424.html
Sejak Matplotlib isn't dapat untuk menggunakan sistem metrik native, jika anda ingin menentukan ukuran angka dalam satuan panjang seperti sentimeter, anda dapat melakukan hal berikut (kode dari 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)
Kemudian anda dapat menggunakan:
plt.figure(figsize=cm2inch(21, 29.7))