y値が文字型だとそのような結果になるようです。
見る限り、x値の並びを基準として、結果の点が右上がりになるようにy値の並びが調整されているようです。
もしかしたらそのあたりの仕様がswarmplot
のマニュアルに記載されているかもしれませんので確認ください。
Python
1import numpy as np
2import pandas as pd
3import matplotlib.pyplot as plt
4import seaborn as sns
5import random
6
7random.seed(110)
8N = 10
9x = list(map(str,[random.randint(1,5) for _ in range(N)]))
10y = list(map(str,[random.randint(4000,6000) for _ in range(N)]))
11cdf = pd.DataFrame({'SOLD':x, 'PRICE':y})
12
13# yは文字型
14ax = sns.swarmplot(x="SOLD", y ="PRICE", data=cdf)
15plt.show()
16
17# yは数値型
18cdf['PRICE'] = cdf['PRICE'].astype(int)
19ax = sns.swarmplot(x="SOLD", y ="PRICE", data=cdf)
20plt.show()
yは文字型
yは数値型