我正在解决优化问题。有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()
答案 0 :(得分:1)
您可以直接向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]])
答案 1 :(得分:-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')