如何删除 seaborn 散点图顶部和底部的空白
How to remove whitespace on top and bottom of seaborn scatterplots
y 轴上有很多刻度的散点图在顶部和底部有一个大的空白,正如您在网格线中看到的那样。如何去除seaborn散点图顶部和底部的空白?
最小工作示例的代码:
import matplotlib.pyplot as plt
import seaborn as sns
data = sns.load_dataset("car_crashes")
plt.figure(figsize=(5, 15))
sns.set_style("whitegrid")
sns.scatterplot(
data=data,
x='alcohol',
y='abbrev',
size='ins_losses',
legend=False,
)
plt.show()
如果你切换到面向对象的绘图风格,绕过ax
,你可以很容易地找到刻度位置。然后您可以将两端的间距调整为您喜欢的任何间距,例如通过更改下面代码中的 2
。我认为这样做可以减少猜测,因为您正在调整滴答间隔的一部分。无论您绘制多少行,您都将获得合理的结果。
例如,这是我的处理方式(使用更少的状态使图更小):
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_style("whitegrid")
# Get some example data.
data = sns.load_dataset("car_crashes")
# Make the plot.
fig, ax = plt.subplots(figsize=(5, 5))
sc = sns.scatterplot(data=data[:15],
x='alcohol',
y='abbrev',
size='ins_losses',
legend=False,
ax=ax,
)
# Get the first two and last y-tick positions.
miny, nexty, *_, maxy = ax.get_yticks()
# Compute half the y-tick interval (for example).
eps = (nexty - miny) / 2 # <-- Your choice.
# Adjust the limits.
ax.set_ylim(maxy+eps, miny-eps)
plt.show()
这给出:
y 轴上有很多刻度的散点图在顶部和底部有一个大的空白,正如您在网格线中看到的那样。如何去除seaborn散点图顶部和底部的空白?
最小工作示例的代码:
import matplotlib.pyplot as plt
import seaborn as sns
data = sns.load_dataset("car_crashes")
plt.figure(figsize=(5, 15))
sns.set_style("whitegrid")
sns.scatterplot(
data=data,
x='alcohol',
y='abbrev',
size='ins_losses',
legend=False,
)
plt.show()
如果你切换到面向对象的绘图风格,绕过ax
,你可以很容易地找到刻度位置。然后您可以将两端的间距调整为您喜欢的任何间距,例如通过更改下面代码中的 2
。我认为这样做可以减少猜测,因为您正在调整滴答间隔的一部分。无论您绘制多少行,您都将获得合理的结果。
例如,这是我的处理方式(使用更少的状态使图更小):
import matplotlib.pyplot as plt
import seaborn as sns
sns.set_style("whitegrid")
# Get some example data.
data = sns.load_dataset("car_crashes")
# Make the plot.
fig, ax = plt.subplots(figsize=(5, 5))
sc = sns.scatterplot(data=data[:15],
x='alcohol',
y='abbrev',
size='ins_losses',
legend=False,
ax=ax,
)
# Get the first two and last y-tick positions.
miny, nexty, *_, maxy = ax.get_yticks()
# Compute half the y-tick interval (for example).
eps = (nexty - miny) / 2 # <-- Your choice.
# Adjust the limits.
ax.set_ylim(maxy+eps, miny-eps)
plt.show()
这给出: