【发布时间】:2017-02-23 03:27:14
【问题描述】:
我想得到一个类似于下图的图,它根据 x 轴的值具有不同的颜色。忽略 u 和 f 字母以及蓝色曲线和灰色线条。我只需要绿线和红线。所以,如果你使用我的代码,你会得到一个全是一种颜色的图。我想要的是当 x 在 0 和转折点之间(在这种情况下是x=50%)时有不同的颜色,然后是其他颜色。
代码:
import matplotlib.pyplot as plt
def GRLC(values):
n = len(values)
assert(n > 0), 'Empty list of values'
sortedValues = sorted(values) #Sort smallest to largest
#Find cumulative totals
cumm = [0]
for i in range(n):
cumm.append(sum(sortedValues[0:(i + 1)]))
#Calculate Lorenz points
LorenzPoints = [[], []]
sumYs = 0 #Some of all y values
robinHoodIdx = -1 #Robin Hood index max(x_i, y_i)
for i in range(1, n + 2):
x = 100.0 * (i - 1)/n
y = 100.0 * (cumm[i - 1]/float(cumm[n]))
LorenzPoints[0].append(x)
LorenzPoints[1].append(y)
sumYs += y
maxX_Y = x - y
if maxX_Y > robinHoodIdx: robinHoodIdx = maxX_Y
giniIdx = 100 + (100 - 2 * sumYs)/n #Gini index
return [giniIdx, giniIdx/100, robinHoodIdx, LorenzPoints]
reg=[400,200]
result_reg = GRLC(reg)
print 'Gini Index Reg', result_reg[0]
print 'Gini Coefficient Reg', result_reg[1]
print 'Robin Hood Index Reg', result_reg[2]
#Plot
plt.plot(result_reg[3][0], result_reg[3][1], [0, 100], [0, 100], '--')
plt.legend(['Reg-ALSRank@10','Equity-Line'], loc='upper left',prop={'size':16})
plt.xlabel('% of items ')
plt.ylabel('% of times being recommended')
plt.show()
【问题讨论】:
-
你必须画两条线。
-
在这种情况下是两条线,但是如果是一条曲线,对于不同的间隔应该是不同的颜色怎么办。老实说,我不认为画多条线是解决方案。
-
老实说,画两条线(每种颜色一条)是解决方案。我目前很难理解您要更改颜色的点。您是否在脚本中的某个地方确定了这一点?
-
不是那个点是曲线转弯的时候,在你调用 GRLC 函数之前还不清楚这个点是什么。
-
但请想象你知道重点在哪里。这有什么帮助?
标签: python matplotlib