我正在尝试使用Pyplot绘制nstrats不同的Pareto前线,但不管我似乎尝试过,每个前端都以相同的颜色出现。我已经尝试过使用和不使用下面的颜色数组,因为我读到Python会自动循环颜色。我在循环中如何使用plot / scatter函数可能有问题?我的代码和输出图的链接如下。特别要注意的是,图例显示了我前面的正确颜色,但所有输出都是一种颜色。我已经验证输出来自多种策略。谢谢您的帮助!
colors = ['r', 'g', 'b']
for i in range(nstrats):
plt.scatter(NPV[i], dev[i], color=colors[i], label = 'Strategy ' + str(i+1))
plt.xlabel("NPV of Harvest Strategy")
plt.ylabel("Standard Dev of Yearly Harvest")
plt.title("Pareto Front for Each Strategy")
plt.legend(loc='best')
plt.show()
我的节目输出的内容:
答案 0 :(得分:1)
尝试将参数颜色更改为c。
colors = ['r', 'g', 'b']
for i in range(nstrats):
plt.scatter(NPV[i], dev[i], c=colors[i], label = 'Strategy ' + str(i+1))
plt.xlabel("NPV of Harvest Strategy")
plt.ylabel("Standard Dev of Yearly Harvest")
plt.title("Pareto Front for Each Strategy")
plt.legend(loc='best')
plt.show()
注意:保留(nstart< = 3 )的值。否则,它将无法正常工作。
答案 1 :(得分:1)
之所以会发生这种情况,是因为所有内容都是通过相同的单个plot命令绘制的。
这里是一个例子:
import matplotlib.pyplot as plt
import numpy as np
data = [1, 100, 2, 200, 3, 300, 4, 400, 5, 500]
data = np.reshape(data, (5, 2))
column = 0
chunks = dict()
chunks[0] = data[data[:, column] < 300]
chunks[1] = data[data[:, column] >= 300]
for i in chunks:
plt.plot(chunks[i][:, 0], chunks[i][:, 1], "x", label="Chunk %i" % i)
plt.legend()
plt.show()
应基于y值将数据分为多个块。但是发生了一个错误,而不是1为y列输入了0。由于此错误,块0是数据的完整副本,块1为空。因此,所有内容均由第一个plot命令以相同颜色绘制。第二个命令仅将带有不同颜色的标签添加到图例中,因为在块1中没有要绘制的数据。