나는 온라인에서 찾을 수있는 모든 것을 시도했지만 여전히 부족했습니다. 내 목표는 matplotlib / networkx를 사용하여 식별자를 기반으로 노드를 구별하는 것입니다.
따라서 현재 그래프의 가장자리와 노드가 있습니다 (여기에 각각의 작은 스 니펫이 있습니다).
sub_interactome.edges = [('P30876', 'P36954'), ('P30876', 'P19387'), ('P41136', 'Q60722'), ('P41136', 'P17433')]
sub_interactome.nodes = ['P30876', 'P36954', 'P41136', 'Q60722', 'P30876', 'P19387','P17433']
내 끝 그래프의 각 노드에 대해 고유 한 색상을 만들려고합니다. 지금까지 이것이 제가 만든 코드이지만 멀리 떨어져 있다고 확신합니다. 이 부분은 나에게 네트워크 자체를 제공합니다.
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 개의 노드가 있으므로 각각에 대해 색상을 입력하는 것만으로는 작동하지 않습니다. 온라인에서 찾을 수있는 다양한 방법을 사용하여 컬러 맵을 만들려고했지만 작동하지 않았습니다. 그런 다음 모든 것을 사전으로 바꾸어 색상 맵을 그런 방식으로 매핑하려고했습니다.
def Convert(tup, di):
for a, b in tup:
di.setdefault(a, [] ).append(b)
return di
dictionary = {}
keyvalinteractome = Convert(sub_interactome.edges,dictionary)
이것은 나를 사전으로 만들었지 만 여전히 각 노드를 색칠하는 적절한 방법을 알아낼 수 없었습니다. .nodes를 사용하여 노드 목록을 만들 수 있기 때문에 아마도 이것이 필요하지 않지만 어떤 식 으로든 도움이 될 수 있다고 생각했습니다. 이들에 대한 컬러 맵을 만들려는 최근 시도는 다음과 같습니다.
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)
이런 식으로 작동하지 않을 색상을 입력해야하며 어쨌든 오류가 발생합니다.
누군가 나를 도울 수 있다면 정말 감사하겠습니다. 저는 파이썬을 처음 접했고 배우려고 노력했지만 지금은 약 5 시간 동안이 문제를 시도해 왔습니다.
미리 감사드립니다!
내가 틀리지 않다면 당신은 일종의 색상 생성기를 찾고 있습니다. 나는 비슷한 도전을 겪었고 가장 대조되는 색상을 선택하는 데 어려움을 겪었습니다.
다음 코드는 잘 작동합니다. HSV 색상 기술을 사용하고 360도 색조 색상 실린더에서 색상을 선택합니다.
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의 길이와 동일한 색상 배열을 반환합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다