如何使用第三个变量按颜色分隔数据的散点图? [复制]

Posted

技术标签:

【中文标题】如何使用第三个变量按颜色分隔数据的散点图? [复制]【英文标题】:How to make a scatter plot with a 3rd variable separating data by color? [duplicate] 【发布时间】:2020-02-23 07:26:53 【问题描述】:

我的问题与python - scatter plot with dates and 3rd variable as color中的问题非常相似

但我希望颜色根据我的第三个变量中的 3 组值而变化。

例如:

#my 3rd variable consists of a column with these planet radii values:

    radii
1    70
2     6
3    54
4     3
5    0.3
...

我希望根据半径>8、4

我尝试过使用另一个问题中介绍的简单代码:

db=table_with_3_columns()
x=db['column a']
y=db['column b']
z=db['radii']
plt.scatter(x,y,c=z,s=30)

但我不知道如何为 z 中的不同集合指定“c”参数。 我也试过使用:

a=[]
for i in db['radii']
    if i>8:
       a['bigradii']=i
    elif i<4:
       a['smallradii']=i
    elif i<8 and i>4:
       a['mediumradii']=i
    return a

但我不知道该怎么做。

结果将是一个散点,由第三列“半径”中的值引导的颜色分隔的点,但我使用第一个代码得到的所有点都是黑色的,或者,通过使用它告诉的第二个代码我说我是一个字符串,我不能把它放在一个列表中:(

我怎样才能做到这一点?

【问题讨论】:

你应该试试 Seaborn 的散点图,我相信它会满足你的需要。 seaborn.pydata.org/generated/seaborn.scatterplot.html,它可以方便地管理散点图的大小(大小)、颜色(色调)和标记形状(样式) 最简洁的选项是使用pd.cut 创建一个新列,然后根据新值绘制颜色。 【参考方案1】:

我认为你应该做的是:

    创建一个空的list,稍后将传递给 scatter 函数中的“c”。 根据您提到的离散化,遍历您的数据并执行 if 语句的“switch like”序列以将 1,2 或 3 添加到列表中。这些数字将代表 cmap 调色板中的不同索引(这意味着不同的颜色)

这是我的意思的一个例子:

import numpy as np
import matplotlib.pyplot as plt

# x and y will have 100 random points in the range of [0,1]
x = np.random.rand(100)
y = np.random.rand(100)
# z will have 100 numbers, in order from 1 to 100
# z represents your third variable
z = np.arange(100)

colors = []

# add 1 or 2 to colors according to the z value
for i in z:
  if i > 50:
    colors.append(2)
  else:
    colors.append(1)

# half the points will be painted with one color and the other half with another one

plt.scatter(x, y, c=colors,)
plt.show()

【讨论】:

以上是关于如何使用第三个变量按颜色分隔数据的散点图? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Pandas / Pyplot中的散点图:如何按类别绘制[重复]

Matplotlib 散点图;颜色作为第三个变量的函数

二元变量的散点图 (ggplot)

如何将图例添加到具有颜色分配的散点图

2018-10-31用R绘制散点图矩阵(成对的散点图)

使用 OpenGL 的散点图:如何设置标记样式