Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
&引用;“条件格式”;在python中,为添加十六进制颜色的列表中的每个数据集_Python_Python 2.7_Formatting_Conditional - Fatal编程技术网

&引用;“条件格式”;在python中,为添加十六进制颜色的列表中的每个数据集

&引用;“条件格式”;在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',

我正在寻找一种基于列表中的数字/百分比进行条件格式化的方法,输出条件格式化需要是十六进制颜色

例如,在下面的数据中,有3个完全唯一的“数据集”,它们由
行[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'})