&引用;“条件格式”;在python中,为添加十六进制颜色的列表中的每个数据集
我正在寻找一种基于列表中的数字/百分比进行条件格式化的方法,输出条件格式化需要是十六进制颜色 例如,在下面的数据中,有3个完全唯一的“数据集”,它们由&引用;“条件格式”;在python中,为添加十六进制颜色的列表中的每个数据集,python,python-2.7,formatting,conditional,Python,Python 2.7,Formatting,Conditional,我正在寻找一种基于列表中的数字/百分比进行条件格式化的方法,输出条件格式化需要是十六进制颜色 例如,在下面的数据中,有3个完全唯一的“数据集”,它们由行[0]+行[1]生成,每个数据集将单独分析 列表形式的数据(当前布局) 所需的输出将是在每行数据中显示上述内容,并附加列,例如: ['UniqueData3', 'UniqueTest1', '4.22', '25%', '41.2%', 'Data'] 可能会变成: ['UniqueData3', 'UniqueTest1', '4.22',
行[0]+行[1]
生成,每个数据集将单独分析
列表形式的数据(当前布局)
所需的输出将是在每行数据中显示上述内容,并附加列,例如:
['UniqueData3', 'UniqueTest1', '4.22', '25%', '41.2%', 'Data']
可能会变成:
['UniqueData3', 'UniqueTest1', '4.22', '25%', '41.2%', 'Data', '#d23f3f', '#db8a2e', '#4ea157']
如果d23f3f
与4.22
相关,db8a2e
与25%
相关,4ea157
与41.2%
相关,请注意十六进制颜色只是示例
有什么想法吗
编辑:CSV格式的数据,以便易于阅读:)
例如,在excel中,它会显示为:
最终看起来像:
预期产出将是:
在视觉方面(仅限于展示)
M4tini下面的答案与我需要的非常接近,只是想寻找一种方法来忽略某些值或强制使用不同的颜色。这种方法有效,需要更改mapValues函数以匹配excel。我不知道他们用的是什么方法,至少在我看来这是合乎逻辑的。当然,有更有效、更漂亮的方法可以做到这一点
def mapValues(values):
values = [float(i.split('%')[0]) for i in values]
colorMap = np.array(['#F8696B', '#FFEB84', '#63BE7B'])
#colorMap = np.array(["low", "mid", "high"])
values = np.asarray(values)
_, bins = np.histogram(values, 2)
mapped = np.digitize(values, bins)
return list(colorMap[mapped - 1])
def mapAndAdd(finalList, tempList, v1,v2,v3):
v1 = mapValues(v1)
v2 = mapValues(v2)
v3 = mapValues(v3)
for i,j in enumerate(newList):
finalList.append(j + [v1[i] , v2[i] , v3[i]])
uniqueDataSet = set()
finalList = []
for index, DataSet in enumerate(lst):
if (DataSet[0] + DataSet[1]) in uniqueDataSet:
v1.append(DataSet[2])
v2.append(DataSet[3])
v3.append(DataSet[4])
newList.append(DataSet)
else:
if (index != 0):
mapAndAdd(finalList, newList, v1,v2,v3)
uniqueDataSet.add(DataSet[0] + DataSet[1])
newList = [DataSet]
v1 = [DataSet[2]]
v2 = [DataSet[3]]
v3 = [DataSet[4]]
mapAndAdd(finalList, newList, v1,v2,v3)
在Python中,您可以使用以下工具完成此操作:
请参阅文档中的部分,该部分演示了许多可用的条件格式功能。从何处获取这些数字和十六进制值之间的关系?@thefourtheye In excel例如:如果分开,最终看起来是这样的:数字\颜色之间是否有特殊关系,或者它们只是用于直观地将相似的值分组在一起?@M4rtini不,它们没有任何特殊关系,它们是按数据集分组的,数据集是通过合并行[0]和行[1]定义的唯一组,在我的示例中,行[1]为我提供了3个唯一组,它们只是被赋予了一个视觉配色方案,就像excel一样,最高的数字是绿色,最低的数字是红色,但采用渐变比例。@M4rtini我已经添加了我的预期输出和一个示例输出csv(我不希望它输出到csv,我希望它进入列表,如图所示),这非常接近我需要的,但是它只有三种颜色,我希望它能够根据数字自动生成渐变,例如:或者,将示例数据转换为1个数据集看起来像:只需向mapValues函数添加更多的容器和颜色就可以了enough@M4tini数据集大小不一,它将根据大小映射正确的颜色?是的。它为每个唯一的数据集创建一个值的直方图。然后找出每个值放在哪个箱子中,并将箱子编号映射到一个值。所以,是的,数据集的大小应该无关紧要。@M4tini是否有一种方法可以轻松地从excel文件生成1-100个颜色渐变列表,这样我就不必手动通过100个单元格获取十六进制颜色?问题是条件格式不适用于excel文件,我只需要excel格式的十六进制颜色代码。。。
UniqueData1,UniqueTest1,13,13.39%,42.7%,Data
UniqueData1,UniqueTest1,14,82%,41.9%,Data
UniqueData1,UniqueTest1,18,29.39%,41%,Data
UniqueData2,UniqueTest2,22.3,44.4%,42.3%,Data
UniqueData2,UniqueTest2,4,44.2%,43.4%,Data
UniqueData2,UniqueTest2,4.1,49%,42.7%,Data
UniqueData3,UniqueTest1,4.45,49.5%,42.42%,Data
UniqueData3,UniqueTest1,4.29,20%,42.3%,Data
UniqueData3,UniqueTest1,4.22,25%,41.2%,Data
[['UniqueData1', 'UniqueTest1', '13', '13.39%', '42.70%', 'Data', '#F8696B', '#F8696B', '#63BE7B'], ['UniqueData1', 'UniqueTest1', '14', '82%', '41.90%', 'Data', '#FFEB84', '#63BE7B', '#FFEB84'], ['UniqueData1', 'UniqueTest1', '18', '29.39%', '41%', 'Data', '#63BE7B', '#FFEB84', '#F8696B'], ['UniqueData2', 'UniqueTest2', '22.3', '44.40%', '42.30%', 'Data', '#63BE7B', '#FFEB84', '#F8696B'], ['UniqueData2', 'UniqueTest2', '4', '44.20%', '43.40%', 'Data', '#F8696B', '#F8696B', '#63BE7B'], ['UniqueData2', 'UniqueTest2', '4.1', '49%', '42.70%', 'Data', '#FFEB84', '#63BE7B', '#FFEB84'], ['UniqueData3', 'UniqueTest1', '4.45', '49.50%', '42.42%', 'Data', '#63BE7B', '#63BE7B', '#63BE7B'], ['UniqueData3', 'UniqueTest1', '4.29', '20%', '42.30%', 'Data', '#FFEB84', '#F8696B', '#FFEB84'], ['UniqueData3', 'UniqueTest1', '4.22', '25%', '41.20%', 'Data', '#F8696B', '#FFEB84', '#F8696B']]
UniqueData1,UniqueTest1,13,13.39%,42.70%,Data,#F8696B,#F8696B,#63BE7B
UniqueData1,UniqueTest1,14,82%,41.90%,Data,#FFEB84,#63BE7B,#FFEB84
UniqueData1,UniqueTest1,18,29.39%,41%,Data,#63BE7B,#FFEB84,#F8696B
UniqueData2,UniqueTest2,22.3,44.40%,42.30%,Data,#63BE7B,#FFEB84,#F8696B
UniqueData2,UniqueTest2,4,44.20%,43.40%,Data,#F8696B,#F8696B,#63BE7B
UniqueData2,UniqueTest2,4.1,49%,42.70%,Data,#FFEB84,#63BE7B,#FFEB84
UniqueData3,UniqueTest1,4.45,49.50%,42.42%,Data,#63BE7B,#63BE7B,#63BE7B
UniqueData3,UniqueTest1,4.29,20%,42.30%,Data,#FFEB84,#F8696B,#FFEB84
UniqueData3,UniqueTest1,4.22,25%,41.20%,Data,#F8696B,#FFEB84,#F8696B
def mapValues(values):
values = [float(i.split('%')[0]) for i in values]
colorMap = np.array(['#F8696B', '#FFEB84', '#63BE7B'])
#colorMap = np.array(["low", "mid", "high"])
values = np.asarray(values)
_, bins = np.histogram(values, 2)
mapped = np.digitize(values, bins)
return list(colorMap[mapped - 1])
def mapAndAdd(finalList, tempList, v1,v2,v3):
v1 = mapValues(v1)
v2 = mapValues(v2)
v3 = mapValues(v3)
for i,j in enumerate(newList):
finalList.append(j + [v1[i] , v2[i] , v3[i]])
uniqueDataSet = set()
finalList = []
for index, DataSet in enumerate(lst):
if (DataSet[0] + DataSet[1]) in uniqueDataSet:
v1.append(DataSet[2])
v2.append(DataSet[3])
v3.append(DataSet[4])
newList.append(DataSet)
else:
if (index != 0):
mapAndAdd(finalList, newList, v1,v2,v3)
uniqueDataSet.add(DataSet[0] + DataSet[1])
newList = [DataSet]
v1 = [DataSet[2]]
v2 = [DataSet[3]]
v3 = [DataSet[4]]
mapAndAdd(finalList, newList, v1,v2,v3)
worksheet.conditional_format('A1:A12', {'type': '3_color_scale'})