回答问题

我想在seaborn中创建一个带有垂直网格线的分组boxplot,即在每个刻度处,应该有一条垂直线,就像在常规散点图中一样。

一些示例代码:

import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
import numpy.random as rnd

some_x=[1,2,3,7,9,10,11,12,15,18]
data_for_each_x=[]

for i in range(0, len(some_x)):
    rand_int=rnd.randint(10,30)
    data_for_each_x.append([np.random.randn(rand_int)])

sns.set()
sns.boxplot(data=data_for_each_x, showfliers=False)
plt.show()

它的外观:

在此处输入图像描述

Answers

如果我理解正确,您需要垂直的白色网格线而不是您当前获得的水平线。这是这样做的一种方法:

创建一个轴对象ax,然后将其分配给sns.boxplot。然后,您可以通过使用ax.xaxis.gridax.yaxis.grid的布尔参数来选择要显示的网格线。由于您想要垂直网格线,请关闭 y 网格 (False) 并打开 x 网格 (True)。

import matplotlib.pyplot as plt
import seaborn as sns
import numpy as np
import numpy.random as rnd

fig, ax = plt.subplots() # define the axis object here
some_x=[1,2,3,7,9,10,11,12,15,18]
data_for_each_x=[]

for i in range(0, len(some_x)):
    rand_int=rnd.randint(10,30)
    data_for_each_x.append([np.random.randn(rand_int)])

sns.set()
sns.boxplot(data=data_for_each_x, showfliers=False, ax=ax) # pass the ax object here

ax.yaxis.grid(False) # Hide the horizontal gridlines
ax.xaxis.grid(True) # Show the vertical gridlines

如果您想同时显示 x 和 y 网格,请使用ax.grid(True)

在此处输入图像描述

Logo

学AI,认准AI Studio!GPU算力,限时免费领,邀请好友解锁更多惊喜福利 >>>

更多推荐