【问题标题】:How do I cluster values of y axis against x axis in scatterplot?如何在散点图中将 y 轴的值与 x 轴聚类?
【发布时间】:2022-01-06 12:17:02
【问题描述】:

假设我有 2 个数组 x = [1,2,3,4,5,6,7] y = [1,2,2,2,3,4,5]

它的散点图是这样的

我想要做的是我希望我的 x 轴在图中看起来像这样

0,4,8

因此,每个 x 中的 y 值应该更接近。 我见过的类似行为是条形图,这称为聚类,在散点图的情况下我该如何做,或者我应该使用任何其他图吗?

我希望我的问题是清楚/可以理解的。 感谢所有帮助

【问题讨论】:

  • 你如何决定哪个原始 x 值进入哪个集群?例如。 x=6 应该去哪个集群?
  • 您可以“手动”修改图形以显示您期望的结果吗?或链接到某处的示例

标签: python matplotlib seaborn


【解决方案1】:

随着你的情节,在你显示情节之前试试这个。

plt.xticks([0,4,8]))

import numpy as np
plt.xticks(np.arange(0, 8+1, step=4))

然后要更改比例,您可以尝试这样的事情,

plt.xticks([0,4,8]))
plt.rcParams["figure.figsize"] = (10,5)

我的例子是这样的,

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(0, 10, 30)
y = np.sin(x)

plt.xticks([0,4,8])
plt.rcParams["figure.figsize"] = (7,3)
plt.plot(x, y, 'o', color='black')

输出

【讨论】:

  • 如果我理解正确的话,OP不仅想改变刻度,而且“每块x中y的值应该更接近”
  • @JohanC 完全正确
【解决方案2】:

我认为您正在寻找的内容与 Seaborn 中的 swarmplotsstripplots 接近。但是,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()

输出给出:

【讨论】:

    猜你喜欢
    • 2019-07-07
    • 1970-01-01
    • 2016-11-10
    • 2020-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-11
    相关资源
    最近更新 更多