Deniz dibi bir arsa için şekil boyutunu nasıl değiştirebilirim?


223

Resmimin boyutunu yazdırmaya uygun olacak şekilde nasıl değiştirebilirim?

Örneğin, boyutları yatay yönde 11,7 inç x 8,27 inç olan A4 kağıda kullanmak istiyorum.

Yanıtlar:


197

Şeklin ne kadar büyük olduğunu belirterek, önceden matplotlib Figure ve Axes nesnelerini oluşturmanız gerekir:

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)

7
bu çözüm, aşağıdaki kodla (farklı türde bir arsa) işe yaramıyor gibi görünüyor. Herhangi bir fikir? "Mylib" in sadece verilerinizi sakladığınız bir kütüphane olduğunu ve bu kodda gerekli olmadığını varsayıyorum: `fig, ax = pyplot.subplots (figsize = (12,6)); sns.jointplot (bellekFiyat ['fiyat'], bellekFakat ['Bellek']) `
TMWP

3
Bu cevap @ TMWP'nin durumunda işe yaramıyor çünkü ortak alan bir şekil düzeyi yöntemidir. Aşağıdaki cevaba bakınız.
elz

5
bu cevap, baltayı girdi olarak kabul etmeyen arsa türleriyle çalışmaz, örneğinsns.lmplot()
Chris

2
Deniz dibindeki arsa büyüklüğü burada açıklandığı gibi heightve aspectparametreleri kullanılarak ayarlanmalıdır. Stackoverflow.com/a/51602446/2412831
LeandroOrdonez

@LeandroOrdonez, eksen seviyesi işlevi için gerçekten geçerli değildir.
Paul H

234

Şekil boyutunu , deniz dibi yönteminde rcanahtar ile parametreye sözlük ileterek de ayarlayabilirsiniz :'figure.figsize'set

import seaborn as sns

sns.set(rc={'figure.figsize':(11.7,8.27)})

Diğer bir alternatif kullanmak olabilir figure.figsizeve rcParamsaşağıdaki gibi resim Şekil boyutu:

from matplotlib import rcParams

# figure size in inches
rcParams['figure.figsize'] = 11.7,8.27

Daha fazla bilgi matplotlib belgelerinde bulunabilir


5
Diğer çözümlerden farklı olarak, bu çözüm arsayı tanımlamanın belirli bir yolunu varsaymaz. Teşekkürler.
LoMaPh

7
Sns.set () öğesini çağırdığınızda, şekil stillerinizi matplotlib varsayılanı yerine sns varsayılanı olarak varsayılan olarak ayarlayacağınızı unutmayın; örneğin, rakamlarınız birdenbire beyaz ızgaralı gri bir arka plana sahip olacaktır - buraya bakın: seaborn.pydata.org/ tutorial / aesthetics.html . Ayrıca, bu benim arsa (sns.pairplot) boyutu üzerinde herhangi bir etkisi yoktu.
Melissa

Nor Mine olarak bir sns.boxplot
Gordon

Bunun için teşekkürler @Melissa. Bu beni daha .set()önce aramak zorunda fark.set_style()
jorijnsmit

89

Sen olmak bağlamı ayarlayabilirsiniz posterveya manuel olarak ayarlanır 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')

resim açıklamasını buraya girin


3
bu cevap, baltayı girdi olarak kabul etmeyen arsa türleriyle çalışmaz, örneğinsns.lmplot()
Chris

Chris'in cevabını genişletmek için, bazı deniz doğumlu araziler birden fazla eksenli kompozit figürler üretir, bu yüzden tek bir ekseni argüman olarak kabul edemezler.
Marmaduke

74

Eğer Seaborn bir "figür düzeyi" yöntemine geçmek çalışıyorsanız (örneğin unutmayın lmplot, catplot/ factorplot, jointplot) sizin ve kullanan argümanlar içinde bu belirtmelidir edebilir heightve aspect.

sns.catplot(data=df, x='xvar', y='yvar', 
    hue='hue_bar', height=8.27, aspect=11.7/8.27)

Bkz. Https://github.com/mwaskom/seaborn/issues/488 ve Şekil düzeyi yöntemlerinin eksen özelliklerine uymadığı konusunda daha fazla ayrıntı için matplotlib nesne yönelimli arabirimi kullanarak deniz dibinin çizilmesi .


12
Şimdiye kadar, baltayı argüman olarak kabul etmeyen sns grafikleri ile doğru bir şekilde ilgilenen tek cevap bu.
Melissa

Yükseklik ve en boy oranının tek bir "faset", yani bir alt grafiğin boyutlarını kontrol ettiğini unutmayın. Yani bu doğrudan şekil boyutlarını ayarlamaz.
bernie

43

önce matplotlib'i içe aktarın ve şekil boyutunu ayarlamak için kullanın

from matplotlib import pyplot as plt
import seaborn as sns

plt.figure(figsize=(15,8))
ax = sns.barplot(x="Word", y="Frequency", data=boxdata)

20

Bu, aşağıdakileri kullanarak yapılabilir:

plt.figure(figsize=(15,8))
sns.kdeplot(data,shade=True)

19

Bu da işe yarayacaktır.

from matplotlib import pyplot as plt
import seaborn as sns    

plt.figure(figsize=(15,16))
sns.countplot(data=yourdata, ...)

16

Benim komplo (sns factorplot) için önerilen cevap işe yaramadı.

Böylece kullanıyorum

plt.gcf().set_size_inches(11.7, 8.27)

Seaborn'lu arsadan hemen sonra (bu yüzden deniz baltasına balta geçirmeye veya rc ayarlarını değiştirmeye gerek yok).


1
Bu FacetGrid ile benim için çalışan tek çözümpython 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")
Nicolas78

Burada aynı. Görünüşe sns.FacetGridgöre ( heightve ile ayarlanan aspect) hesaplanan bir değere göre bir rakam boyutu belirleyecek ve deniz boyutundaki çizimden hemen sonra rakam boyutunu değiştirmek işe yarayacak. Ve figürün boyutunu değiştirdikten sonra arsanın diğer ince ayarları gerçekleşebilir
Yunting Zhao

16

Çoklu çizim ızgara nesnelerini döndüren "şekil düzeyi" yöntemlerine ilişkin elz yanıtına ek olarak , aşağıdaki yaklaşımı kullanarak şekil yüksekliğini ve genişliğini açıkça (en boy oranını kullanmadan) ayarlamak mümkündür:

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_figwidthve set_figheightızgara nesneleri için iyi çalışır. >>> denizdoğusunu içe aktar >>> pyplot olarak matplotlib.pyplot dosyasını içe aktar >>> ipuçları = seaborn.load_dataset ("ipuçları") >>> g = seaborn.FacetGrid (ipuçları, sütun = "zaman", satır = "sigara içen") >>> g = g.map (pyplot.hist, "total_bill") >>> g.fig.set_figwidth (10) >>> g.fig.set_figheight (10)
Paul Rougieux

1
Belki de API değişti, ama benim için g.fig.set_figwidth yerine g.figure.set_figwidth idi. Matplotlib sürüm 3.1.0 ve seaborn 0.9.0 kullanıyorum
NateW

6

Paul H ve J. Li'nin en iyi cevapları her tür deniz dibi figürü için işe yaramaz. İçin FacetGrid(örneğin tip sns.lmplot()), kullanımı sizeve aspectparametre.

Size en boy oranını koruyarak hem yüksekliği hem de genişliği değiştirir.

Aspect yüksekliği sabit tutarak yalnızca genişliği değiştirir.

Bu iki parametre ile oynayarak istediğiniz boyutu her zaman elde edebilirsiniz.

Kredi bilgileri: https://stackoverflow.com/a/28765059/3901029

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.