【问题标题】:Color every point in a scatterplot differently in numpy/python [duplicate]在numpy / python中为散点图中的每个点着色不同[重复]
【发布时间】:2018-09-15 07:28:39
【问题描述】:

我正在解决一个优化问题。有 n 次迭代,每次迭代都有一个点 x_n=[x_n1, x_n2]。我想绘制迭代 x_n 以便随着 n 的增加点的颜色变暗或变亮或其他。目前我可以绘制迭代,但它们都是相同的颜色,所以我不知道哪些点对应于更高的 n 值。

变量 x_test 是一个数组,其中包含从 x_0 到 x_n 的所有迭代。这是我绘制它的代码:

pl.scatter(x_test[:,0], x_test[:,1])
pl.show()

我找到了很多关于如何为图表着色的信息,但不是我想要的方式,每个点对应不同的明暗。

这是一个最小的、完整的、可验证的示例:

import numpy as np
import pylab as pl
x = np.array([[1,1],[1,2],[1,3],[2,4]])
pl.plot(x[:,0], x[:,1])

这给出了数组 x 中点的散点图,但我需要它们每个都是与 x 中的位置相对应的不同颜色,即 [1,1] 应该是最轻的,然后 [1,2] 将稍微变暗,等等,直到 [2,4] 最暗。

编辑:这是我采用的解决方案:

scaled_itera = np.array(range(x_test.shape[0]))/(float(x_test.shape[0])-1)
colors = pl.cm.coolwarm(scaled_itera)

pl.scatter(x_test[:,0], x_test[:,1], color=colors)
pl.show()

【问题讨论】:

标签: python numpy matplotlib plot colors


【解决方案1】:

你需要遍历每个点

假设您的数据类似于

x = [[1,2],[3,4],[5,6],[7,8]]

然后,像

c_aray = ['black','green','red','blue']
for i in range(len(x)):
    xn = x[i]
    plt.plot(xn[0],xn[1],color = c_aray[i],'o')

【讨论】:

  • 这个我可以做到,但我有数千次迭代,所以我需要一种方法来自动生成颜色列表 c_aray
  • 几千个可能很难,但几十个是可能的;从十六进制代码开始,然后“智能”地递增它。这将使您朝着正确的方向前进:thedataschool.co.uk/gwilym-lockwood/viridis-colours-tableau
  • 其实有一种比遍历所有点更简单的方法,我将解决方案编辑到问题中。
【解决方案2】:

你可以直接给plt.scatter()一个颜色列表。例如:你可以这样做:

import seaborn as sns
color_list = sns.color_palette("Paired", n_colors=x_test.shape[0])
plt.scatter(x_test[:,0], x_test[:,1], color=color_list)

如果您想继续使用matplotlib 获取颜色,请查看colormap_reference

一个使用plt.cm的例子:

plt.scatter(x_test[:,0], x_test[:,1], color=plt.cm.Paired.colors[:x_test.shape[0]])

【讨论】:

  • 我认为color 也采用标量值并在内部应用调色板。那么不需要seaborn :)
  • 我没有 seaborn 这个模块,我宁愿呆在 numpy/pylab 的范围内
  • 您不需要使用seabornpalettable。您可以直接使用颜色列表,但我只是喜欢它们,因为它们提供了预定义的调色板。在我更新的答案中查看链接。
  • 好吧,我不清楚如何在没有 seaborn/palettable 的情况下做到这一点。我可以推断出我将使用,例如 cmap = 'autumn' 但 color = 的条目应该是什么?
  • 检查我在上面的答案中发布的链接以使用 matplotlib 中的颜色图。
猜你喜欢
  • 1970-01-01
  • 2022-01-17
  • 2014-10-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-09
  • 2013-01-30
  • 1970-01-01
  • 2022-07-08
相关资源
最近更新 更多