如何在Seaborn中的分组箱图中添加垂直网格线?

时间:2018-12-21 21:47:16

标签: python matplotlib seaborn boxplot

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

一些示例代码:

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()

外观:

enter image description here

1 个答案:

答案 0 :(得分:2)

如果我对您的理解正确,那么您希望使用垂直的白色网格线而不是当前使用的水平线。这是一种方法:

创建轴对象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)

enter image description here