Bagaimana cara mengubah ukuran gambar saya sehingga cocok untuk dicetak?
Sebagai contoh, saya ingin menggunakan kertas A4, yang dimensi 11,7 inci kali 8,27 inci dalam orientasi lanskap.
Bagaimana cara mengubah ukuran gambar saya sehingga cocok untuk dicetak?
Sebagai contoh, saya ingin menggunakan kertas A4, yang dimensi 11,7 inci kali 8,27 inci dalam orientasi lanskap.
Jawaban:
Anda harus membuat objek Gambar dan Sumbu matplotlib sebelumnya, menentukan seberapa besar angka tersebut:
from matplotlib import pyplot
import seaborn
import mylib
a4_dims = (11.7, 8.27)
df = mylib.load_data()
fig, ax = pyplot.subplots(figsize=a4_dims)
seaborn.violinplot(ax=ax, data=df, **violin_options)
sns.lmplot()
heightdan aspectseperti yang dijelaskan di sini stackoverflow.com/a/51602446/2412831
Anda juga dapat mengatur ukuran gambar dengan meneruskan kamus ke rcparameter dengan metode 'figure.figsize'seaborn set:
import seaborn as sns
sns.set(rc={'figure.figsize':(11.7,8.27)})
Alternatif lain mungkin menggunakan figure.figsizedari rcParamsukuran gambar set seperti di bawah ini:
from matplotlib import rcParams
# figure size in inches
rcParams['figure.figsize'] = 11.7,8.27
Rincian lebih lanjut dapat ditemukan di dokumentasi matplotlib
.set()sebelumnya.set_style()
Anda dapat mengatur konteks menjadi posteratau diatur secara manual fig_size.
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
np.random.seed(0)
n, p = 40, 8
d = np.random.normal(0, 2, (n, p))
d += np.log(np.arange(1, p + 1)) * -5 + 10
# plot
sns.set_style('ticks')
fig, ax = plt.subplots()
# the size of A4 paper
fig.set_size_inches(11.7, 8.27)
sns.violinplot(data=d, inner="points", ax=ax)
sns.despine()
fig.savefig('example.png')
sns.lmplot()
Perhatikan bahwa jika Anda mencoba meneruskan ke metode "angka tingkat" di seaborn (misalnya lmplot, catplot/ factorplot, jointplot) Anda bisa dan harus menentukan ini dalam argumen menggunakan heightdan aspect.
sns.catplot(data=df, x='xvar', y='yvar',
hue='hue_bar', height=8.27, aspect=11.7/8.27)
Lihat https://github.com/mwaskom/seaborn/issues/488 dan Merencanakan dengan seaborn menggunakan antarmuka berorientasi objek matplotlib untuk detail lebih lanjut tentang fakta bahwa metode level figur tidak mematuhi spesifikasi sumbu.
Ini juga akan berfungsi.
from matplotlib import pyplot as plt
import seaborn as sns
plt.figure(figsize=(15,16))
sns.countplot(data=yourdata, ...)
Untuk plot saya (a sns factorplot) jawaban yang diajukan tidak berfungsi dengan baik.
Jadi saya gunakan
plt.gcf().set_size_inches(11.7, 8.27)
Tepat setelah plot dengan seaborn (jadi tidak perlu melewatkan kapak ke seaborn atau mengubah pengaturan rc).
python g = sns.FacetGrid(df.set_index('category'), col="id") pyplot.gcf().set_size_inches(11.7, 8.27) g.map(lambda data, color: data.plot.barh(color=color), "count")
sns.FacetGridakan mengatur ukuran gambar sesuai dengan nilai yang dihitung (ditetapkan oleh heightdan aspect) dan mengubah ukuran gambar langsung setelah plot seaborn akan bekerja. Dan penyempurnaan plot lainnya dapat terjadi setelah mengubah ukuran gambar
Selain jawaban elz mengenai metode "angka", yang mengembalikan objek kotak multi-plot dimungkinkan untuk mengatur tinggi dan lebar angka secara eksplisit (tanpa menggunakan aspek rasio) menggunakan pendekatan berikut:
import seaborn as sns
g = sns.catplot(data=df, x='xvar', y='yvar', hue='hue_bar')
g.fig.set_figwidth(8.27)
g.fig.set_figheight(11.7)
set_figwidthdan set_figheightbekerja dengan baik untuk objek grid. >>> impor seaborn >>> impor matplotlib.pyplot sebagai pyplot >>> tips = seaborn.load_dataset ("tips") >>> g = seaborn.FacetGrid (kiat, col = "waktu", baris = "perokok") >>> g = g.map (pyplot.hist, "total_bill") >>> g.fig.set_figwidth (10) >>> g.fig.set_figheight (10)
Jawaban teratas oleh Paul H dan J. Li tidak bekerja untuk semua jenis tokoh seaborn. Untuk FacetGridtipe (misalnya sns.lmplot()), gunakan parameter sizedan aspect.
Size mengubah ketinggian dan lebar, mempertahankan rasio aspek.
Aspect hanya mengubah lebar, menjaga ketinggian konstan.
Anda selalu bisa mendapatkan ukuran yang diinginkan dengan bermain dengan dua parameter ini.