Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.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 绘制散点图,其中点的颜色取决于数据类别_Python_Matplotlib_Scatter Plot - Fatal编程技术网

Python 绘制散点图,其中点的颜色取决于数据类别

Python 绘制散点图,其中点的颜色取决于数据类别,python,matplotlib,scatter-plot,Python,Matplotlib,Scatter Plot,我有一个数据列表X,它是一个Nx2矩阵。我想将每个X的第一个元素与X的所有第二个元素进行对比。 首先,我将X的所有第一个和第二个元素分离到它们自己的列表中:X_comp1,X_comp2 我还有一个Nx1类别列表(cat),它显示X元素属于哪个类别,即如果cat[I]=3,这意味着X[I]属于类别3 我想在散点图中为每个类别使用不同颜色的点 到目前为止,我只能通过硬编码来实现这一点,但当有更多的类别时,这将变得非常低效。 这是我的代码(它假设有5个类别): 我想让它对类别的数量更加灵活,这样我就

我有一个数据列表
X
,它是一个Nx2矩阵。我想将每个
X
的第一个元素与
X
的所有第二个元素进行对比。 首先,我将
X
的所有第一个和第二个元素分离到它们自己的列表中:
X_comp1
X_comp2

我还有一个Nx1类别列表(cat),它显示X元素属于哪个类别,即如果
cat[I]=3
,这意味着
X[I]
属于类别3

我想在散点图中为每个类别使用不同颜色的点

到目前为止,我只能通过硬编码来实现这一点,但当有更多的类别时,这将变得非常低效。 这是我的代码(它假设有5个类别):

我想让它对类别的数量更加灵活,这样我就不必为每个类别编写大量的if语句

为了实现这一点,我想到了一个颜色列表:

colours = ["b", "g", "r", "c", "m",...]#number of colours depends on no. of categories
#This is the only element which I would like remain hard coded, as I want to choose the colours
其中每种颜色对应一个类别。然后程序迭代所有数据,并根据类别绘制每个点。但我不确定这是如何实现的。

试试这个

color_dict={1:b',2:g',3:r',4:c',5:m'}
对于拉链中的x1、x2、c(X_组件1、X_组件2、cat):
如果颜色为c,则:
plt.散射(x1,x2,c=color_dict[c])
plt.图例(列表(颜色索引键())
plt.show()

不必使用字典检查
c
的每一个值,我们可以删除所有if语句

以获得一个漂亮的绘图,您还可以使用
seaborn

import seaborn as sns
import pandas as pd
sns.set()
df = pd.DataFrame({'X_1': X_comp1,'X_2':X_comp2, 'category':cat})
sns.scatterplot(data=df,x='X_1', y='X_2', hue='category')
如果您关心哪个类别应该有什么颜色,您可以使用自己的类别颜色dict传递
调色板
参数:

my_palette = {1: 'b', 2: 'g', 3: 'r', 4: 'c', 5: 'm'}
sns.scatterplot(data=df,x='X_1', y='X_2', hue='category', palette=my_palette)

如果您对seaborn的默认选择不满意,还有一系列预定义的选项板。

使用字典
{1:b',2:g',3:r',4:c',5:m'}
my_palette = {1: 'b', 2: 'g', 3: 'r', 4: 'c', 5: 'm'}
sns.scatterplot(data=df,x='X_1', y='X_2', hue='category', palette=my_palette)