我认为您正在寻找的内容与 Seaborn 中的 swarmplots 和 stripplots 接近。但是,Seaborn 的 swarmplot 和 stripplot 在其中一个轴上纯粹是分类的,这意味着它们不会保留每个类别中元素的相对 x 轴顺序。
做你想做的事情的一种方法是增加类别之间的x轴空间([0,4,8])并相应地修改你的xticks。
下面是一个示例,我将数据分配给 3 个不同的类别:[-2,2[、[2,6[、[6,10[。并且每个条都与其直接相邻的条相距dil_k。
import matplotlib.pyplot as plt
import numpy as np
#Generating data
x= np.random.choice(8,size=(100))
y= np.random.choice(8,size=(100))
dil_k=20
#Creating the spacing between categories
x[np.logical_and(x<6, x>=2)]+=dil_k
x[np.logical_and(x<10, x>=6)]+=2*dil_k
#Plotting
ax=plt.scatter(x,y)
#Modifying axes accordingly
plt.xticks([0,2,22,24,26,46,48,50],[0,2,2,4,6,6,8,10])
plt.show()
输出给出:
或者,如果您不关心在每个类别中保持元素沿 x 轴的顺序,那么您可以直接使用 swarmplot。
代码如下:
import matplotlib.pyplot as plt
import numpy as np
import seaborn as sns
#Generating data
x= np.random.choice(8,size=(100))
y= np.random.choice(8,size=(100))
#Creating the spacing between categories
x[np.logical_and(x<2,x>=-2)]=0
x[np.logical_and(x<6, x>=2)]=4
x[np.logical_and(x<10, x>=6)]=8
#Plotting
sns.swarmplot(x=x,y=y)
plt.show()
输出给出: