Pyplot在legend中显示不同的颜色,但在sam中显示plots

2024-10-06 13:49:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用Pyplot绘制不同的pareto前沿,但是不管我尝试了什么,每个前沿都是相同的颜色。我尝试过在使用和不使用下面的colors数组的情况下执行此操作,因为我读到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()

我的程序输出:

output image


Tags: offor颜色绘制情况plt数组colors
2条回答

发生这种情况是因为所有内容都是由同一个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值将数据分成块。但是出现了一个错误,而不是为列y输入了1,而是为列x输入了0。由于这个错误,块0是数据的完整副本,而块1是空的。因此,第一个plot命令以相同的颜色打印所有内容。第二个命令只将颜色不同的标签添加到图例中,因为块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)。否则,它就行不通了。在

相关问题 更多 >