gpt4 book ai didi

Python散点图: how to use a colormap that has the same colors as the colorcycle

转载 作者:行者123 更新时间:2023-11-30 21:58:44 30 4
gpt4 key购买 nike

我正在尝试为散点图中的簇着色,并使用两种不同的方法进行管理。

在第一个中,我迭代地绘制每个集群,在第二个中,我一次绘制所有数据,并根据集群的标签 [0, 1, 2, 3 ,4] 对集群进行着色。

我对 example1example3 中得到的结果感到满意,但我不明白为什么当根据标签为簇着色时,颜色会发生如此显着的变化迭代地绘制每个簇。

此外,为什么第二个簇(尽管始终具有标签“1”)在 example1 和 example3 中具有不同的颜色?

import matplotlib.pyplot as plt
plt.style.use('fivethirtyeight') #irrelevant here, but coherent with the examples=)

fig, ax = plt.subplots(figsize=(6,4))
for clust in range(kmeans.n_clusters):
ax.scatter(X[kmeans.labels_==clust],Y[kmeans.labels_==clust])
ax.set_title("example1")`

example1

plt.figure(figsize = (6, 4))
plt.scatter(X,Y,c=kmeans.labels_.astype(float))
plt.title("example2")

example2

(我知道我可以为第二种方法显式定义颜色图,但我找不到任何可以重现示例 1 中结果的颜色图)

这是一个最小的工作示例

import matplotlib.pyplot as plt
import pandas as pd
plt.style.use('fivethirtyeight') #irrelevant here, but coherent with the examples=)
X=pd.Series([1, 2, 3, 4, 5, 11, 12, 13, 14, 15])
Y=pd.Series([1,1,1,1,1,2,2,2,2,2])
clusters=pd.Series([0,0,0,0,0,1,1,1,1,1])


fig, ax = plt.subplots(figsize=(6,4))
for clust in range(2):
ax.scatter(X[clusters==clust],Y[clusters==clust])
ax.set_title("example3")

example3

plt.figure(figsize = (6, 4))
plt.scatter(X,Y, c=clusters)
plt.title("example4")

example4

最佳答案

当您循环遍历簇并绘制散点图而不指定任何颜色时,将使用事件属性循环器(颜色循环)的默认颜色。事件属性循环器在 rcParams 中定义。它是通过使用的样式设置的;在您的情况下,使用 ' Fivethirtyeight'

print(plt.rcParams["axes.prop_cycle"])
> cycler('color', ['#008fd5', '#fc4f30', '#e5ae38', '#6d904f', '#8b8b8b', '#810f7c'])

此颜色的前两种颜色('#008fd5'、'#fc4f30')是您在图中看到的颜色。

当您使用带有作为颜色参数的散点图时,这些值将通过颜色图映射到颜色。如果未指定颜色图,它将采用 rcParam 中定义的默认颜色图。

print(plt.rcParams["image.cmap"])
> "viridis"

' Fivethirtyeight' 样式没有定义任何特殊的颜色图,因此默认值将保持不变。 (您在图片中观察到与 viridis 不同的颜色图的事实是因为还有一些其他代码仍然处于事件状态,但问题中未显示。)

此时我需要开始口译;我认为您的问题实际上是如何使用与其中的颜色循环具有相同颜色的颜色图来获得单个散点。预定义的颜色图均不包含 538 个循环器颜色。因此,您可以通过 taking the colors from the cycle 手动定义该颜色图。 ,

import matplotlib.colors as mcolors
cmap = mcolors.ListedColormap(plt.rcParams['axes.prop_cycle'].by_key()['color'])

现在您需要一种方法来索引颜色图,因为您有离散的簇。

n = len(clusters.unique())
norm = mcolors.BoundaryNorm(np.arange(n+1)-0.5, n)

当然,这要求颜色图中的颜色数量大于或等于类的数量 - 这里就是这种情况。

将它们放在一起,(我添加了另一个类别,以使其更具说明性)

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import matplotlib.colors as mcolors

plt.style.use('fivethirtyeight') #relevant here!!

X=pd.Series([1, 2, 3, 4, 5, 11, 12, 13, 14, 15])
Y=pd.Series([1,1,1,1,1,2,2,2,2,2])
clusters=pd.Series([0,0,0,0,0,1,1,1,1,2])

cmap = mcolors.ListedColormap(plt.rcParams['axes.prop_cycle'].by_key()['color'])
n = len(clusters.unique())
norm = mcolors.BoundaryNorm(np.arange(n+1)-0.5, n)

plt.figure(figsize = (6, 4))
sc = plt.scatter(X,Y, c=clusters, cmap=cmap, norm=norm)
plt.colorbar(sc, ticks=clusters.unique())
plt.title("example4")

plt.show()

enter image description here

关于Python散点图: how to use a colormap that has the same colors as the colorcycle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54811670/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com