Python 如何创建散点图,将两个嵌套字典与具有相同键的另一个嵌套字典进行比较

Python 如何创建散点图,将两个嵌套字典与具有相同键的另一个嵌套字典进行比较,python,numpy,dictionary,matplotlib,nested,Python,Numpy,Dictionary,Matplotlib,Nested,我有三个嵌套字典:data_geo1、data_geo2、data_ali,它们都由两个键和一个值组成。目标是相互比较这些值。字典的第一个键相同,但对于第二个,其中30个与第一个字典共享,20个与第二个字典共享!不幸的是,键的方向彼此不相同。目标是使用matplotlib和numpy数组创建散点图,以将第一个和第二个字典与data_ali中的数据进行比较。这有点复杂,我不知道从哪里开始!以下是我为创建词典所写的内容: import os import numpy as np path = "/

我有三个嵌套字典:data_geo1、data_geo2、data_ali,它们都由两个键和一个值组成。目标是相互比较这些值。字典的第一个键相同,但对于第二个,其中30个与第一个字典共享,20个与第二个字典共享!不幸的是,键的方向彼此不相同。目标是使用matplotlib和numpy数组创建散点图,以将第一个和第二个字典与data_ali中的数据进行比较。这有点复杂,我不知道从哪里开始!以下是我为创建词典所写的内容:

import os
import numpy as np

path = "/home/ali/Desktop/data/"
root = "/home/ali/Desktop/SAMPLES/"



data_geo1={}
with open(path+"GSE98212_H_DE_genes_count.txt","rt") as fin: #data for sample 1-30
    h = fin.readline()
    sample1 = h.split()
    sample_names = [s.strip('"') for s in sample1[1:31]]
    for l in fin.readlines():
        l = l.strip().split()
        if l:
            gene= l[0].strip('"')
            data_geo1[gene] = {}
            for i, x in enumerate(l[1:31]):
                data_geo1[gene][sample_names[i]] = int(x)

#print(data_geo1)

data_geo2={}
with open (path+"GSE98212_L_DE_genes_count.txt","rt") as fin:
        h= fin.readline()
        sample2=h.split()
        sample_names=sample2[1:21]
        for l in fin.readlines():
            l = l.strip().split()
            if l:
                gene= l[0].strip()

            data_geo2[gene]={}
            for i,x in enumerate (l[1:21]):
                data_geo2[gene][sample_names[i]]= int(x)

#print(data_geo2)

data_ali={}

for sample_name in os.listdir(root):
    with open(os.path.join(root, sample_name, "counts.txt"), "r") as fin:
        for line in fin.readlines():
            gene, reads = line.split()
            reads = int(reads)
            if gene.startswith('ENSG'):
                data_ali.setdefault(gene, {})[sample_name] = reads

#print(data_ali)
每个字典结构的示例如下:

数据_geo1:{'ENSG0000110514':“样本”4-利什什什什(UU)4-利什什(UUUUUUU4-利什什什什什什什什(UUU8-25-利什什027-UV2”:7 7:7 7 7“709,”709,“样本”7,“样本”4“样本”4-利什什(UU4-利什什什什什什什什什什)你们你们们7 7 7 7“样本”3:3:5“样本”50,“样本”5-U25-利什什什什什什切切切切7 7 7 7 7-7.2 7你们们2 7你们们7 7 7 7 7 7 7 7.2”:7:2:2:2:2”:699,“699,”699,“690,”699,“样本”690,“样本,”样本,“样本,”样本,”样本,”样本,“样本,”样本,”样本,“样本,”样本,”样本,”样本,”样本,”样本,”样本,”样本,”样本,”样本,”样本,”样本,”样本,”样本v2':566,'样本3-le“样本”29-leish032个大写大写的2 2个大写的2 2个大写大写的2 2个大写的7 7:661,“样本”1,“样本8-利什什什什什什什什的8-利什什什什U U留留留留留留留留留留留留留留留留留留留2012年12-利什什什什什什什什什什什干干0122的12个2 2个2 2 2 2 2 2个大写大写:7 7:661:661,“661,“样本”661,“样本8-利什什什什什留留留留留留留留留留留留留留留留留留留留留留留留留留留U 016U U U U U U U U U U U U U U U U U U U U U U U U U U U U U U 0166 6 6 6 5 5 5 5 5 U U U U U U U U U U U U U U U U U U U U U U U U U U U U U_017_v2':583“样本24-leish026-Leish024-Uv3”:590,“样本22-leish-leish-U024-Uv3”:537,“样本14-leish-U019-Uv3”:438,“样本30-leish032-Uv3”:494,“样本7-leish-U016-Uv2”:518,“样本15-leish-leish-021-Uv2”:834,“样本17-leish-leish-022-Uv2”:742}

数据2:{'ENSG0000110514':{'Sample_19':518,'Sample_10':468,'Sample_20':517,'Sample_9':431,'Sample_8':522,'Sample_7':437,'Sample_6':491,'Sample_4':442,'Sample_3':667,'Sample_2':438,'Sample_1':378,'Sample_14':345,'Sample_13':424,'Sample_18':570,'Sample_15':492,'Sample_16':486,'Sample_12':401;4}

数据:“ENSG0000110514”:“样本”20分:517,“样本”20分:517,“样本”24-Lesh026-利什什什什什什利利利什什什什什什什什什什什什什什什什19-样本(样本)19-莱什什19-利什什19-利什什什什什什什什19-勒什什什什什什什什什什UUUUU021-UUUUU2 3 3 3 3 3 3 3 3 3 3 3 3 3.v2:v2:71:7107:7107 7,“样本(样本(样本(样本(样本)7 7 7 7样本)19-样本)19-样本,样本(样本)19-U U U U U U U U U U 19-利什利什什什什什什什什什什什什什什什19-19-利什利什什什什什什什什什什什什什什什什什什什什什什什什什什什什什什什什什什什什什什什什什样品_“样本”4,“样本11-利什什(11-利什什什)018个8 U U U U 2 2 2:574,“样本”4,“样本11-利什什(11-利什什什什)018个8 U U U U U 018 8 8 8个利什什什什什什什什什什什什什什什什什什什什什什什什什什什什什什什努018 U 018 UUUUUv27 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7”:577:574“574”574,“574,”574,“样本,”4,“样本”4,“样本”4,“样本,“样本”4,“样本”4,“样本,”样本7“样本”7“样本,”样本”7“样本,”样本:样本”7“样本:436,“样本”:样本”:样本:样本:436,“样本”:样本7样本:7样本:436,“样本”:样本”:样本:436,“27-leish028_v2':584,'样本_26-leish027_v3':629,'样本_5':460,'样本_4':441,'样本_3':668,'样本_19':516,'样本_1':378,'样本_2':437,'样本_9-leish_017_v2':582,'样本_5-leish_015_v2':421,'样本_4-leish 012_v3':样本:502,'样本_21-leish_024(670,'样本)样本:433,'_10分:466分,“样本17分”:488分,“样本16分”:487分,“样本15分”:490分,“样本14-leish\u 019\u v3分”:441分,“样本30-leish032\u v3分”:497分,“样本28-leish028\u v3分”:542分,“样本15-leish\u 021\u v2分”:837分,“样本17-leish\u 022\u v2分”:747分

main_key=u'ensg0000110514'
geo1\u labels=data\u geo1[main\u key].keys()
geo1_ys=[data_geo1[main_key][x]表示geo1_标签中的x]
ali_geo1_ys=[data_ali[main_key][x]表示geo1_标签中的x]
geo2\u labels=data\u geo2[main\u key].keys()
geo2_ys=[data_geo2[main_key][x]表示geo2_标签中的x]
ali_geo2_ys=[data_ali[main_key][x]表示geo2_标签中的x]
然后,您可以(例如)散点绘制用于比较的值,如:

导入matplotlib.pyplot作为plt
图,ax=plt.子批次()
最大散射(范围(透镜(geo1_标签)),geo1_ys,facecolors=“无”,edgecolors=“b”,marker=“o”)
X.散射(范围(透镜(geo1_标签)),ali_geo1_ys,facecolors=“无”,edgecolors=“r”,marker=“s”)
ax.set_xticks(范围(len(geo1_标签)))
ax.设置标签(geo1标签,旋转=90)
plt.紧_布局()
plt.show()

更新: 有几种方法可以获得您描述的绘图,其中一种方法是使用模块
pandas
;在这种特定情况下,一开始可能需要更多的努力,但它非常流行:

导入matplotlib.pyplot作为plt
作为pd进口熊猫
主密钥=u'ENSG0000110514'
compare1=pd.DataFrame.from_dict({
'data_geo2':data_geo1[主键],
'data_ali':{k:data_ali[main_key][k]代表数据geo1[main_key].keys()中的k
},orient='index')
compare2=pd.DataFrame.from_dict({
'data_geo2':data_geo2[主键],
'data_ali':{k:data_ali[main_key][k]代表数据geo2[main_key].keys()中的k
},orient='index')
比较1['Sample_19-leish_023_v2'].plot.bar()
plt.紧_布局()
plt.show()
另一个选项是直接使用上述DICT进行绘图:

导入matplotlib.pyplot作为plt
主密钥=u'ENSG0000110514'
样本编号=u'样本编号19-leish\u 023\u v2'
图,ax=plt.子批次()
xs=[0,1]
ys=[data_geo1[main_key][sample_key],data_ali[main_key][sample_key]]
ax.bar(xs,ys)
ax.set_xticks(xs)
ax.set\u xticklabels(['data\u geo1','data\u ali']))
plt.紧_布局()
plt.show()

谢谢你的建议,但主键是为一个键编写的,但我的键是可变的,如下所示:“ENSG0000268358”、“ENSG0000254148”、“ENSG0000254148”、“ENSG0000254148”等。我如何通过这些键来解决这个问题?这些键在3个字典中都是相互的!它们是基因1、基因2和基因3我在上面创建的词典!啊,从你最初的问题来看,这还不清楚。这些其他词典是否还包含第二级的“统一”键,即,你会有吗