此处的目标是将高于某个阈值的值变为一种颜色,将低于此阈值的值变为另一种颜色。下面的代码试图将它分成两个直方图,但只有在阈值为50%时它才会看起来平衡。我假设我必须使用discreetlevel变量。
finalutilityrange
是一些带有一堆值的向量(你必须生成它来测试代码),我试图绘制它。值deter
是确定它们是蓝色还是红色的值。 discreetlevel
只是我想要的垃圾箱数量。
import random
import numpy as np
import matplotlib.pyplot as plt
discreetlevel = 10
deter = 2
for x in range(0,len(finalutilityrange)):
if finalutilityrange[x-1]>=deter:
piraterange.append(finalutilityrange[x-1])
else:
nonpiraterange.append(finalutilityrange[x-1])
plt.hist(piraterange,bins=discreetlevel,normed=False,cumulative=False,color = 'b')
plt.hist(nonpiraterange,bins=discreetlevel),normed=False,cumulative=False,color = 'r')
plt.title("Histogram")
plt.xlabel("Utlity")
plt.ylabel("Probability")
plt.show()
答案 0 :(得分:1)
这个解决方案比@ user2699更复杂一点。我只是为了完整性而提出它。您可以完全控制hist
返回的修补程序对象,因此,如果您可以确保所使用的阈值完全位于bin边缘,则可以轻松更改为所选修补程序的颜色。您可以这样做,因为hist
可以接受一系列bin边作为bins
参数。
import numpy as np
from matplotlib import pyplot as plt
# Make sample data
finalutilityrange = np.random.randn(100)
discreetlevel = 10
deter = 0.2
# Manually create `discreetlevel` bins anchored to `deter`
binsAbove = round(discreetlevel * np.count_nonzero(finalutilityrange > deter) / finalutilityrange.size)
binsBelow = discreetlevel - binsAbove
binwidth = max((finalutilityrange.max() - deter) / binsAbove,
(deter - finalutilityrange.min()) / binsBelow)
bins = np.concatenate([
np.arange(deter - binsBelow * binwidth, deter, binwidth),
np.arange(deter, deter + (binsAbove + 0.5) * binwidth, binwidth)
])
# Use the bins to make a single histogram
h, bins, patches = plt.hist(finalutilityrange, bins, color='b')
# Change the appropriate patches to red
plt.setp([p for p, b in zip(patches, bins) if b >= deter], color='r')
结果是具有不同颜色的箱子的同质直方图:
如果你没有锚定到deter
,那么这些垃圾箱可能会比你更宽。第一个或最后一个bin通常会稍微超出数据的边缘。
答案 1 :(得分:0)
这个答案没有解决你的代码,因为它不是自包含的,但对于你想要做的事情,默认的直方图应该可以工作(假设加载了numpy / pyplot)
[HttpPost]
public async Task<object> UploadFile()
{
var file = await Request.Content.ReadAsByteArrayAsync();
var fileName = Request.Headers.GetValues("fileName").FirstOrDefault();
var filePath = "/upload/files/";
try
{
File.WriteAllBytes(HttpContext.Current.Server.MapPath(filePath) + fileName , file);
}
catch (Exception ex)
{
// ignored
}
return null;
}
说明:
x = randn(100)
idx = x < 0.2 # Threshold to separate values
hist([x[idx], x[~idx]], color=['b', 'r'])
它会目标图可以做的更多,所以在你不小心自己实现之前查看文档。