如何使用连续值[`seaborn`调色板为Matplotlib`散点图着色? [英] How to color `matplotlib` scatterplot using a continuous value [`seaborn` color palettes?]
问题描述
我有一个散点图,我想根据另一个值(在这种情况下,天真地分配给 np.random.random()
)为它着色。
I have a scatterplot and I want to color it based on another value (naively assigned to np.random.random()
in this case).
是否可以使用 seaborn
映射连续值(不直接与数据相关联)被绘制),每个点都沿 seaborn
沿连续梯度的值?
Is there a way to use seaborn
to map a continuous value (not directly associated with the data being plotted) for each point to a value along a continuous gradient in seaborn
?
这是我的生成数据的代码:
Here's my code to generate the data:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.preprocessing import StandardScaler
from sklearn import decomposition
import seaborn as sns; sns.set_style("whitegrid", {'axes.grid' : False})
%matplotlib inline
np.random.seed(0)
# Iris dataset
DF_data = pd.DataFrame(load_iris().data,
index = ["iris_%d" % i for i in range(load_iris().data.shape[0])],
columns = load_iris().feature_names)
Se_targets = pd.Series(load_iris().target,
index = ["iris_%d" % i for i in range(load_iris().data.shape[0])],
name = "Species")
# Scaling mean = 0, var = 1
DF_standard = pd.DataFrame(StandardScaler().fit_transform(DF_data),
index = DF_data.index,
columns = DF_data.columns)
# Sklearn for Principal Componenet Analysis
# Dims
m = DF_standard.shape[1]
K = 2
# PCA (How I tend to set it up)
Mod_PCA = decomposition.PCA(n_components=m)
DF_PCA = pd.DataFrame(Mod_PCA.fit_transform(DF_standard),
columns=["PC%d" % k for k in range(1,m + 1)]).iloc[:,:K]
# Plot
fig, ax = plt.subplots()
ax.scatter(x=DF_PCA["PC1"], y=DF_PCA["PC2"], color="k")
ax.set_title("No Coloring")
理想情况下,我想做这样的事情:
Ideally, I wanted to do something like this:
# Color classes
cmap = {obsv_id:np.random.random() for obsv_id in DF_PCA.index}
# Plot
fig, ax = plt.subplots()
ax.scatter(x=DF_PCA["PC1"], y=DF_PCA["PC2"], color=[cmap[obsv_id] for obsv_id in DF_PCA.index])
ax.set_title("With Coloring")
# ValueError: to_rgba: Invalid rgba arg "0.2965562650640299"
# to_rgb: Invalid rgb arg "0.2965562650640299"
# cannot convert argument to rgb sequence
但它不喜欢连续值。
我要使用以下调色板:
sns.palplot(sns.cubehelix_palette(8))
我也尝试过执行以下操作,但对它来说毫无意义不知道我在上面的 cmap
词典中使用了哪些值:
I also tried doing something like below, but it wouldn't make sense b/c it doesn't know which values I used in my cmap
dictionary above:
ax.scatter(x=DF_PCA["PC1"], y=DF_PCA["PC2"],cmap=sns.cubehelix_palette(as_cmap=True)
推荐答案
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
x, y, z = np.random.rand(3, 100)
cmap = sns.cubehelix_palette(as_cmap=True)
f, ax = plt.subplots()
points = ax.scatter(x, y, c=z, s=50, cmap=cmap)
f.colorbar(points)
这篇关于如何使用连续值[`seaborn`调色板为Matplotlib`散点图着色?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!