matplotlib 按x值显示的彩色散点图[重复]

vaqhlq81  于 2023-10-24  发布在  其他
关注(0)|答案(5)|浏览(101)

这个问题已经有答案了

Matplotlib custom colors in scatter plot(1个答案)
26天前关闭
我想用它们的x值给matplotlib散点图的点着色。例如,如果x属于[0,5],那么点是红色的,如果(5,10]是绿色,等等。
我试着用颜色赋值给参数c列表,但它不起作用
plt.plot(x_final, y_final, 'o', c=["r","g"])

eqzww0vc

eqzww0vc1#

你可以尝试从numpy中使用np.select来创建一个 interval-based 颜色数组:

colors = np.select( # feel free to adjust
    [(x_final >= 0) & (x_final <= 5),
     (x_final > 5) & (x_final <= 10)],
    ["r", "g"], default="k"
)

plt.scatter(x_final, y_final, c=colors, marker="P");

输出量:

使用的输入:

np.random.seed(0)

x_final = np.linspace(1, 30, 50)
y_final = np.random.randn(50)
6kkfgxo0

6kkfgxo02#

您可以使用pandas.cut轻松处理任意数量的情况:

import pandas as pd

colors = pd.cut(x_final,
                bins=[0, 5, 10, max(x_final)+1],
                labels=['g', 'r', 'k'], include_lowest=True).to_numpy()
plt.scatter(x_final, y_final, marker='o', c=colors)

使用numpy.digitize

colors = np.array(['g', 'r', 'k'])[np.digitize(x_final, [-0.01, 5, 10, np.inf],
                                               right=True)-1]
plt.scatter(x_final, y_final, marker='o', c=colors)

范例:

vtwuwzda

vtwuwzda3#

一种简单的方法(不是最好的方法,但易于阅读和理解)包括基于您所描述的逻辑预先计算colors的列表。您可以使用自定义函数(用于更复杂的逻辑)或简单的for循环,如下所示。

import matplotlib.pyplot as plt
import random

x = list(range(13))
y = [random.randint(0, 5) for v in x] #some random Y values

colors = []
for v in x:
    if 0<=v<5:
        colors.append('red')
    elif 5<=v<10:
        colors.append('green')
    else:
        colors.append('black')
        
plt.scatter(x, y, c=colors)
plt.show()

fslejnso

fslejnso4#

如果它是一个嵌套框架,你可以使用seaborn,假设你有x_final,y_final和category列作为嵌套框架(df_final)中的列:

import seaborn as sns
sns.scatterplot(x='x_final', y='y_final', hue='category', data=df_final)
plt.show()
r6hnlfcb

r6hnlfcb5#

一个简单而快速的方法是将每个x值除以其绝对最大值 (如果我们也有负值),并将其作为参数传递给颜色元组中的一个RGB值:

import matplotlib.pyplot as plt
import numpy as np

x = np.arange(50)
y = x**2

for i in range(len(x)):
    plt.plot(x[i], y[i], 'o', color=(i/max(abs(x)), 0.1, 0.1))

相关问题