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)