ฉันจะเปลี่ยนขนาดของภาพเพื่อให้เหมาะสำหรับการพิมพ์ได้อย่างไร
ตัวอย่างเช่นฉันต้องการใช้กับกระดาษ A4 ที่มีขนาด 11.7 นิ้วคูณ 8.27 นิ้วในแนวนอน
ฉันจะเปลี่ยนขนาดของภาพเพื่อให้เหมาะสำหรับการพิมพ์ได้อย่างไร
ตัวอย่างเช่นฉันต้องการใช้กับกระดาษ A4 ที่มีขนาด 11.7 นิ้วคูณ 8.27 นิ้วในแนวนอน
คำตอบ:
คุณต้องสร้างวัตถุรูป matplotlib และ Axes ก่อนเวลาโดยระบุว่าร่างใหญ่แค่ไหน:
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()
height
และaspect
พารามิเตอร์ตามที่อธิบายไว้ที่นี่stackoverflow.com/a/51602446/2412831
คุณสามารถกำหนดขนาดรูปโดยส่งพจนานุกรมไปยังrc
พารามิเตอร์ด้วยคีย์'figure.figsize'
ในset
วิธีการทางทะเล:
import seaborn as sns
sns.set(rc={'figure.figsize':(11.7,8.27)})
ทางเลือกอื่น ๆ อาจจะใช้figure.figsize
ของrcParams
ขนาดรูปชุดดังต่อไปนี้:
from matplotlib import rcParams
# figure size in inches
rcParams['figure.figsize'] = 11.7,8.27
รายละเอียดเพิ่มเติมสามารถดูได้ในเอกสารประกอบ matplotlib
.set()
ก่อน.set_style()
คุณสามารถตั้งค่าบริบทที่จะเป็นหรือชุดด้วยตนเองposter
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()
โปรดทราบว่าถ้าคุณกำลังพยายามที่จะผ่านไปยังระดับ "ร่าง" วิธีการในทะเล (ตัวอย่างเช่นlmplot
, catplot
/ factorplot
, jointplot
) ที่คุณสามารถและควรระบุข้อโต้แย้งนี้ภายในโดยใช้และheight
aspect
sns.catplot(data=df, x='xvar', y='yvar',
hue='hue_bar', height=8.27, aspect=11.7/8.27)
ดู https://github.com/mwaskom/seaborn/issues/488และการพล็อตกับ seaborn โดยใช้อินเตอร์เฟสเชิงวัตถุ matplotlibสำหรับรายละเอียดเพิ่มเติมเกี่ยวกับข้อเท็จจริงที่ว่าวิธีการระดับรูปไม่ปฏิบัติตามข้อกำหนดของแกน
matplotlib นำเข้าครั้งแรกและใช้เพื่อกำหนดขนาดของรูป
from matplotlib import pyplot as plt
import seaborn as sns
plt.figure(figsize=(15,8))
ax = sns.barplot(x="Word", y="Frequency", data=boxdata)
สิ่งนี้สามารถทำได้โดยใช้:
plt.figure(figsize=(15,8))
sns.kdeplot(data,shade=True)
สิ่งนี้จะทำงานได้เช่นกัน
from matplotlib import pyplot as plt
import seaborn as sns
plt.figure(figsize=(15,16))
sns.countplot(data=yourdata, ...)
สำหรับพล็อตของฉัน (a sns factorplot) คำตอบที่เสนอนั้นใช้งานไม่ได้
ดังนั้นฉันใช้
plt.gcf().set_size_inches(11.7, 8.27)
หลังพล็อตที่มีทะเล (จึงไม่จำเป็นต้องผ่านขวานไปที่ทะเลหรือเพื่อเปลี่ยนการตั้งค่า 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.FacetGrid
จะกำหนดขนาดรูปตามค่าที่คำนวณได้ (กำหนดโดยheight
และaspect
) และการเปลี่ยนขนาดของรูปโดยตรงหลังจากพล็อตทะเลจะทำงาน และการปรับจู
นอกจากคำตอบelzเกี่ยวกับวิธีการ "ระดับร่าง" ที่ส่งคืนวัตถุกริดพล็อตแบบหลายจุดก็เป็นไปได้ที่จะกำหนดความสูงและความกว้างของร่างอย่างชัดเจน (นั่นคือโดยไม่ต้องใช้อัตราส่วนภาพ) โดยใช้
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_figwidth
และset_figheight
ทำงานได้ดีสำหรับวัตถุตาราง >>> นำเข้าทะเล >>> นำเข้า matplotlib.pyplot เป็น pyplot >>> เคล็ดลับ = seaborn.load_dataset ("เคล็ดลับ") >>> g = seaborn.FacetGrid (เคล็ดลับ col = "เวลา", แถว = "ผู้สูบบุหรี่") >>> g = g.map (pyplot.hist, "total_bill") >>> g.fig.set_figwidth (10) >>> g.fig.set_figheight (10)
คำตอบที่ดีที่สุดของ Paul H และ J. Li ไม่สามารถใช้ได้กับบุคคลในทะเลทุกประเภท สำหรับFacetGrid
ประเภท (ตัวอย่างsns.lmplot()
) ให้ใช้พารามิเตอร์size
และaspect
Size
เปลี่ยนทั้งความสูงและความกว้างโดยคงอัตราส่วนไว้
Aspect
เปลี่ยนความกว้างเท่านั้นรักษาความสูงคงที่
คุณสามารถรับขนาดที่คุณต้องการได้ด้วยการเล่นกับพารามิเตอร์ทั้งสองนี้