首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何为网络中的不同节点分配不同的颜色?

如何为网络中的不同节点分配不同的颜色?
EN

Stack Overflow用户
提问于 2020-11-21 03:25:47
回答 2查看 208关注 0票数 1

我尝试了所有我能在网上找到的东西,但仍然找不到。我的目标是使用matplotlib/networkx根据节点的标识符对节点进行明显的着色。

所以我现在有了我的图的边和节点(下面是每个边和节点的一小段):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sub_interactome.edges = [('P30876', 'P36954'), ('P30876', 'P19387'), ('P41136', 'Q60722'), ('P41136', 'P17433')]

sub_interactome.nodes = ['P30876', 'P36954', 'P41136', 'Q60722', 'P30876', 'P19387','P17433']

我正在尝试为我的结束图的每个节点设置不同的颜色。到目前为止,这是我写的代码,但我确信我离得很远。这部分让我了解网络本身。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
plt.figure(figsize=(10,10))
nx.spring_layout(sub_interactome)
nx.draw_networkx(sub_interactome, with_labels=True)
col.Colormap(valid_uniprots, len(valid_uniprots))
plt.tick_params(axis='x', which='both', bottom=False, top=False, labelbottom=False)
plt.tick_params(axis='y', which='both', right=False, left=False, labelleft=False)
for ty in ['right','top','bottom','left']:
    plt.gca().spines[ty].set_visible(False)   
plt.show()

我总共有239个节点,所以仅仅为每个节点输入颜色显然是行不通的。我试着用网上可以找到的各种方法创建一个色彩映射表,但没有成功。然后,我将其全部转换为字典,以尝试以这种方式映射颜色映射:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def Convert(tup, di): 
    for a, b in tup: 
        di.setdefault(a, [] ).append(b) 
    return di 
dictionary = {}
keyvalinteractome = Convert(sub_interactome.edges,dictionary)

这使我成为了一个字典,但我仍然不能想出一种适当的方法来为每个节点着色。我可能不需要这个,因为我可以使用.nodes创建一个节点列表,但我认为它可能在某种程度上有所帮助。我最近一次尝试为这些创建颜色映射,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
G = sub_interactome
n_colors = len(keyvalinteractome.keys())

pos = nx.spring_layout(G)
for key in G.nodes():
    nx.draw_networkx_nodes(G,pos,[m for m in G.nodes() if keyvalinteractome[m]==key],node_color=['red','blue','green','yellow','purple'])
    nx.draw_networkx_edges(G,pos)

这样,我仍然必须输入不起作用的颜色,而且无论如何它都会给我一个错误。

如果有人能帮我解决这个问题,我将不胜感激,我是python的新手,正在努力学习,但我已经尝试这个问题5个小时了。

提前感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-11-21 03:41:09

如果我没记错的话,你正在寻找某种颜色生成器。我也经历过类似的挑战,而且我还面临着挑选最具对比度的颜色的挑战。

下面的代码对你来说应该很好,它使用HSV颜色技术,并从360度色调色柱中选择颜色:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import numpy as np, colorsys

def choose_colors(node_list):

    num_colors = len(node_list)
    
    colors=[]
    for i in np.arange(0., 360., 360. / num_colors):
        hue = i/360.
        lightness = (30 + np.random.rand() * 70)/100.0
        saturation = (30 + np.random.rand() * 70)/100.0
        colors.append(colorsys.hls_to_rgb(hue, lightness, saturation))
    return colors

这段代码返回一个与传递给它的node_list长度相同的颜色数组。

票数 0
EN

Stack Overflow用户

发布于 2020-11-21 03:44:52

将for循环替换为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
color_list=['red','blue','green','yellow','purple']    
for ind, key in enumerate(G.nodes()):
    nx.draw_networkx_nodes(G,pos,node_color=color_list[ind % 5])
    nx.draw_networkx_edges(G,pos)    
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64939523

复制
相关文章
Boost.Spirit 初体验
使用代码生成代码是一件十分美妙的事情,于是有了各种代码生成器。但是生成代码,意味着要有对生成规则的分析和处理。 Boost.Spirit 就是这么一个语法分析工具,它实现了对上下文无关文法的LL分析。支持EBNF(扩展巴科斯范式)。 Boost.Spirit 的使用真的是把模板嵌套用到了极致。确实这么做造成了非常强的扩展性,生成的代码也非常高效,但是嵌套的太复杂了,对于初学者而言真心难看懂。 你能想象在学习阶段一个不是太明白的错误导致编译器报出的几十层模板嵌套错误信息的感受吗?而且,这么复杂的模板嵌套还直接导致了编译速度的巨慢无比。 其实在之前,我已经使用过Spirit的Classic版本,即1.X版本,但是过多的复制操作让我觉得当时用得很低效,还好分析的内容并不复杂所以没。体现出来 这回就来研究下功能更强劲的2.X 版本。
owent
2023/03/06
9110
Boost.Spirit 初体验
使用代码生成代码是一件十分美妙的事情,于是有了各种代码生成器。但是生成代码,意味着要有对生成规则的分析和处理。 Boost.Spirit 就是这么一个语法分析工具,它实现了对上下文无关文法的LL分析。支持EBNF(扩展巴科斯范式)。 Boost.Spirit 的使用真的是把模板嵌套用到了极致。确实这么做造成了非常强的扩展性,生成的代码也非常高效,但是嵌套的太复杂了,对于初学者而言真心难看懂。 你能想象在学习阶段一个不是太明白的错误导致编译器报出的几十层模板嵌套错误信息的感受吗?而且,这么复杂的模板嵌套还直接导致了编译速度的巨慢无比。 其实在之前,我已经使用过Spirit的Classic版本,即1.X版本,但是过多的复制操作让我觉得当时用得很低效,还好分析的内容并不复杂所以没。体现出来 这回就来研究下功能更强劲的2.X 版本。
owent
2018/08/01
3.3K0
无线充qi协议c语言详解,无线充电Qi协议正向通信FSK的解调设计[通俗易懂]
摘 要: 无线充电Qi协议提出发射器和接收器通过频率调制(FSK)方式进行正向通信,进而建立完整的通信状态控制。接收器可采用测宽法进行频率解调,然而由于电磁耦合变化、负载变化、载波占空比变化、测量量化等引起的误差,该方法无法满足实际应用的要求。该文针对传统测宽法抗干扰能力弱的问题,提出一种窗口滤波算法,通过参考相邻脉冲频率确定当前脉冲的有效频率,极大地提高了测宽法的抗干扰能力。经实例分析,改进后的测宽法抗干扰能力强、逻辑简单,为无线充电正向通信FSK解调提供一种可行的方法。
全栈程序员站长
2022/07/04
2.8K0
无线充qi协议c语言详解,无线充电Qi协议正向通信FSK的解调设计[通俗易懂]
无线充电原理与QI协议详解[通俗易懂]
一 、无线充电基本原理 无线充电的基本原理就是我们平时常用的开关电源原理,区别在于没有磁介质耦合,那么我们需要利用磁共振的方式提高耦合效率,具体方法是在发送端和接收端线圈串并联电容,是发送线圈处理谐振状态,接收端线圈也是如此
全栈程序员站长
2022/07/21
8.1K0
无线充电原理与QI协议详解[通俗易懂]
Qi v1.2.4协议 之 定频调压方案
工作原理:通过改变工作频率从而调节发射功率;在某些发射频段会对手机电路造成一定干扰;
全栈程序员站长
2022/06/25
6900
遇到这几个 JS “神(qi)奇(pa)“写法也是醉了......
本篇译自:https://javascript.plainenglish.io/5-trickiest-javascript-interview-questions
掘金安东尼
2022/09/19
4750
遇到这几个 JS “神(qi)奇(pa)“写法也是醉了......
《超越C++标准库:Boost库导引》:Boost库简介-字符串和文本处理
正则表达式对于解决相当数量的模式匹配(pattern-matching)问题是至关重要的。它们经常被用于处理长字符串、非精确地查找子字符串、根据某些格式tokenize字符串,或者依照某个标准对字符串进行修改。以前C++缺少对于正则表达式的支持,用户不得不求助于其它对正则表达式有强有力支持的语言,比如Perl,awk和sed。Regex对于正则表达式提供高效有力的支持,它遵循与标准模板库(STL)相同的设计理念,这使得它的用法相当直观。Regex已经被即将到来的(标准)库技术报告所采纳。更多信息请参阅“Library 5: Regex”。
用户7886150
2021/01/16
8850
App内购(IAP)的价格优(qi)化(pian)策略
  App的内购的优化很重要。或者说,凡是移动端的购买转化优化都很重要。  这么说有一点同意反复的啰嗦,但app与web不同,app用于说服(或者影响)消费者的空间比较有限,篇幅不能太长,画面不能太多,而且也不可能总是弹出窗口骚扰消费者。   所以app中实现转化的难度我觉得总体要比web高很多,实现app的转化不能拖泥带水,试错的机会不多,需要在洞察消费者心理之后一击必中。   但是,普遍的一个感觉困惑的地方在于,消费者的心理很难把握,尤其是对于消费者愿意接受的价格的把握。如何将价格优化到正好合适的地方
iCDO互联网数据官
2018/03/02
1.8K0
App内购(IAP)的价格优(qi)化(pian)策略
对于Qi和百度,不需要再猜测和臆想
我也是最近才开始去搜索和了解Qi,然后我就被Qi的工作能力、自律性、责任心、人格魅力以及对Ai将改变世界的执着所折服。
后端技术探索
2018/08/10
2290
对于Qi和百度,不需要再猜测和臆想
SignalR 在IE中无法工作 - Internet Explorer
运行基于SignalR的超线程上载器的代码,发现SignalR 在IE 9上居然没法工作了,提示如下: 提示很明显,需要json2.js的支持。 使用Nuget 搜索json2.js 并安装: 在引用
张善友
2018/01/29
3.3K0
SignalR 在IE中无法工作 - Internet Explorer
redis 复制很简单? 树上qi个猴,一枪还剩几个猴
相对比使用RDS ,NOSQL 数据库的虽使用,但被忽视的不少,相对于数据库之间的复制,(物理复制, 逻辑复制),redis 的复制,不少人认为还是比较简单的。那下面有一些问题
AustinDatabases
2020/02/21
5240
redis  复制很简单? 树上qi个猴,一枪还剩几个猴
【说站】PDF如何更改页面尺寸大小,QI插件改变PDF页面大小
2、Quite Imposing plus3 PDF拼版插件中文汉化破解版(Acrobat Pro DC的QI插件)
很酷的站长
2022/11/24
2.8K0
【说站】PDF如何更改页面尺寸大小,QI插件改变PDF页面大小
LLT工作总结与Gherkin语法解析器简单应用
这几天产品线这里要搞LLT(Low level Test)重点工作,保障版本的高质量发布。工作当然包括一系列的规范、培训、编码、检视,不过具体看下来主要还是提取了下面的一些度量要点:
mythsman
2022/11/14
9310
LLT工作总结与Gherkin语法解析器简单应用
SAP QM 启用04检验类型的物料,工单上STOCK TYPE不是QI?
SAP QM 启用04检验类型的物料,工单上STOCK TYPE不是QI? 比如物料号:F000047628 04检验类型是激活的, 我们执行事务代码COR1创建了工单,并下达工单。
SAP虾客
2021/04/14
5900
SAP MM 没有启用QM的前提下可以从QI库存里退货给Vendor?
SAP MM 没有启用QM的前提下可以从QI库存里退货给Vendor? 经过验证是可以的。比如如下退货采购订单, 数量是10,勾选了”Return Items”选项, VL10B,创建交货单, 交货单 2107935574, 看交货单item里的stock type,是X,如下图: 后续使用一个质检库存发货,成功了,如下图示: 看物料凭证号数据, -完- 2020-5-20 写于苏州市。
SAP虾客
2021/01/09
3400
WBS工作分解法
工作分解结构(Work Breakdown Structure,简称WBS)跟因数分解是一个原理,就是把一个项目,按一定的原则分解,项目分解成任务,任务再分解成一项项工作,再把一项项工作分配到每个人的日常活动中,直到分解不下去为止。
PM吃瓜
2020/07/09
1.6K0
WBS工作分解法
基于解析器组合子的语法解析器(上)
语法,在语言学中是指任意自然语言中句子、短语以及词汇等语法单位的语法结构与语法意义的规律,本质上即音义结合体之间的结合规律。在程序语言的范畴上,描述的则是基于文本的源码以特定规则放置,来表达其特有的语义内涵。
黄啊码
2022/06/20
2.7K0
点击加载更多

相似问题

当满足特定条件时,从列表创建新列表

32

在python中,当满足特定条件时,从列表创建新列表

10

列表满足条件对值的字典数

30

满足条件时列表中的值之和

325

当满足某些条件时,如何只返回列表流?

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文