Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何按比例排列matplotlib散点_Python_Matplotlib_Scatter Plot - Fatal编程技术网

Python 如何按比例排列matplotlib散点

Python 如何按比例排列matplotlib散点,python,matplotlib,scatter-plot,Python,Matplotlib,Scatter Plot,我有2个输入(x,y)和3个输入类,我用不同的颜色标记它们。通过缩放,我可以看到特定类在特定(x,y)点被发现的次数 要在图表上显示点,我使用以下代码: ax.scatter(first_column, second_column, c=outputs_colors, s=labels_mean, alpha=0.3) first_column - x_values; second_column - y_values; c=outputs_colors - colors for diff

我有2个输入(x,y)和3个输入类,我用不同的颜色标记它们。通过缩放,我可以看到特定类在特定(x,y)点被发现的次数

要在图表上显示点,我使用以下代码:

ax.scatter(first_column, second_column, c=outputs_colors, s=labels_mean, alpha=0.3)


first_column - x_values; 
second_column - y_values; 
c=outputs_colors - colors for different classes; 
s=labels_mean - class share at a given point
当x、y输入为各种浮点数时,图表具有信息性:

但是当x,y是整数,并且类中存在许多重叠时,图表就不清晰了:

是否可以在不使用循环和单独的plot.scatter的情况下,按大小从背景的大到前景的小排列散点?要得到这样的东西:

我想您只需要对数据进行排序,以便首先绘制更大的标记。我不知道如何存储数据,所以这里有一种面向数据的方法:

x = [1.5, 1.5, 1.5, 1.5, 1.5, 2.6, 2.6, 2.6, 2.6, 2.6]
y = np.array([1.5, 3.0, 7.4, 20., 20., 1.5, 3.0, 7.4, 20., 20.])
s = np.array([100, 100, 100, 50, 100, 100, 100, 100, 50, 100])
c = np.array(['k', 'k', 'k', 'r', 'k', 'k', 'k', 'k', 'r', 'k'])
如果你把它画成

from matplotlib import pyplot as plt
fig, ax = plt.subplots()
ax.scatter(x, y, s=s, c=c)
你会遇到你的问题,因为黑色标记覆盖了较小的红色标记。据我所知,matplotlib中没有解决此问题的功能,因此您必须首先按
s
以相反顺序对点进行排序

import numpy as np
idx_sort = np.argsort(s)[::-1]
x, y, s, c = map(lambda vv: np.take(vv, idx_sort), [x, y, s, c])

当人们没有可利用的数据时,他们很难帮助你。你只要给他们一些变量和一个要解决的问题