在 Dash/Plotly 中显示属性会导致 KeyError

2024-02-04

我正在尝试可视化文档中的引用。为此,我有Elements.csv,看起来像这样:

Doc,Description,DocumentID
SOP Laboratory,This SOP should be used in the lab,10414
Visual Design,Basics for Visual Design,1200139348
GMP,Good Manufacturing Practises,4638261
Windows PC manual,This manual describes how to use Windows PCs,271922

In Connections.csv,我有参考资料:

Source,Target
SOP Laboratory,Windows PC manual
SOP Laboratory,GMP
Visual Design,Windows PC manual

IE。有一个参考SOP Laboratory,这指向Windows PC manual, etc.

我用来可视化该网络的代码适用于 Dash/Plotly:

import pandas as pd
import networkx as nx
import plotly.graph_objs as go
import plotly
import dash
import dash_core_components as dcc
import dash_html_components as html

## Dash setup

external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css']
app = dash.Dash(__name__, external_stylesheets=external_stylesheets)


## Data

edges = pd.read_csv('Connections.csv', encoding="utf8")
nodes = pd.read_csv('Elements.csv', encoding="utf8")


## Graph

G = nx.from_pandas_edgelist(edges, 'Source', 'Target')
nx.set_node_attributes(G, nodes.set_index('Doc')['Description'].to_dict(), 'Description')
nx.set_node_attributes(G, nodes.set_index('Doc')['DocumentID'].to_dict(), 'DocumentID')

pos = nx.spring_layout(G)

for node in G.nodes:
    G.nodes[node]['pos'] = list(pos[node])

traceRecode = []

index = 0
for edge in G.edges:
    x0, y0 = G.nodes[edge[0]]['pos']
    x1, y1 = G.nodes[edge[1]]['pos']
    trace = go.Scatter(x=tuple([x0, x1, None]), y=tuple([y0, y1, None]),
                        mode='lines',
                        hoverinfo='none',
                        line={'width': 2},
                        marker=dict(color='#000000'),
                        line_shape='spline',
                        opacity=1)
    traceRecode.append(trace)
    index = index + 1

node_trace = go.Scatter(
    x=[],
    y=[],
    hovertext=[],
    text=[],
    mode='markers+text',
    textposition="bottom center",
    hoverinfo='text',
    marker=dict(
        showscale=True,
        colorscale='Agsunset',
        reversescale=True,
        color=[],
        size=20,
        colorbar=dict(
            thickness=15,
            title='Node Connections',
            xanchor='left',
            titleside='right'
        ),
        line=dict(width=0)))

index = 0
for node in G.nodes():
    x, y = G.nodes[node]['pos']
    # hovertext = "Document Name: " + str(G.nodes[node]['Doc']) + "<br>" + "Document ID: " + str(G.nodes[node]['DocumentID'])
    # text = nodes['Doc'][index]
    node_trace['x'] += tuple([x])
    node_trace['y'] += tuple([y])
    # node_trace['hovertext'] += tuple([hovertext])
    # node_trace['text'] += tuple([text])
    index = index + 1

for node, adjacencies in enumerate(G.adjacency()):
    node_trace['marker']['color']+=tuple([len(adjacencies[1])])
    node_info = adjacencies[0] #+ ' (' +str(adjacencies[1]) + ')' #+' (' +str(len(adjacencies[1])) + ' connections)'
    node_trace['text']+=tuple([node_info])

traceRecode.append(node_trace)

figure = {
    "data": traceRecode,
    "layout": go.Layout(title='Document Overview', showlegend=False, hovermode='closest',
                        margin={'b': 40, 'l': 40, 'r': 40, 't': 40},
                        xaxis={'showgrid': False, 'zeroline': False, 'showticklabels': False},
                        yaxis={'showgrid': False, 'zeroline': False, 'showticklabels': False},
                        height=1000,
                        clickmode='event+select',
                        annotations=[
                            dict(
                                ax=(G.nodes[edge[0]]['pos'][0] + G.nodes[edge[1]]['pos'][0]) / 2,
                                ay=(G.nodes[edge[0]]['pos'][1] + G.nodes[edge[1]]['pos'][1]) / 2, axref='x', ayref='y',
                                x=(G.nodes[edge[1]]['pos'][0] * 3 + G.nodes[edge[0]]['pos'][0]) / 4,
                                y=(G.nodes[edge[1]]['pos'][1] * 3 + G.nodes[edge[0]]['pos'][1]) / 4, xref='x', yref='y',
                                showarrow=True,
                                arrowhead=4,
                                arrowsize=2,
                                arrowwidth=1,
                                opacity=1
                            ) for edge in G.edges]
                        )}

app.layout = html.Div([
    dcc.Graph(figure=figure
    ),
])

if __name__ == '__main__':
    app.run_server(debug=True)

我从中找到了这段代码Github 仓库 https://github.com/jhwang1992/network-visualization.

这导致:错误的箭头 https://i.stack.imgur.com/9c0ut.png

然而,错误的方向是错误的。 (正确方向请参见红色箭头。)

我想要实现的是这个(来自 Github 存储库的“Bob”和“Type1”),即当鼠标悬停在节点上时显示文档名称、描述和 ID:目标属性 https://i.stack.imgur.com/jLSs0.png

但是,当我注释掉这些行时,就像这样

index = 0
for node in G.nodes():
    x, y = G.nodes[node]['pos']
    hovertext = "Document Name: " + str(G.nodes[node]['Doc']) + "<br>" + "Document ID: " + str(G.nodes[node]['DocumentID'])
    text = nodes['Doc'][index]
    node_trace['x'] += tuple([x])
    node_trace['y'] += tuple([y])
    node_trace['hovertext'] += tuple([hovertext])
    node_trace['text'] += tuple([text])
    index = index + 1

# for node, adjacencies in enumerate(G.adjacency()):
#     node_trace['marker']['color']+=tuple([len(adjacencies[1])])
#     node_info = adjacencies[0] #+ ' (' +str(adjacencies[1]) + ')' #+' (' +str(len(adjacencies[1])) + ' connections)'
#     node_trace['text']+=tuple([node_info])

但是,这会导致错误:

Traceback (most recent call last):
  File "C:\Users\rothstem\Desktop\LearnDash\StackEX\app.py", line 73, in <module>
    hovertext = "Document Name: " + str(G.nodes[node]['Doc']) + "<br>" + "Document ID: " + str(G.nodes[node]['DocumentID'])
KeyError: 'Doc'

我不太明白,因为'Doc'定义如上。


在创建图表期间,您创建了节点属性"Description":

nx.set_node_attributes(G, nodes.set_index('Doc')['Description'].to_dict(), 'Description')

所以你只需要更换"Doc" with "Description":

hovertext = "Document Name: " + str(G.nodes[node]['Description']) + "<br>" + "Document ID: " + str(G.nodes[node]['DocumentID'])
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Dash/Plotly 中显示属性会导致 KeyError 的相关文章

  • Sublime Text 插件开发中的全局 Python 包

    一 总结 我不知道 Sublime Text 插件开发人员如何使用 Sublime Text 查找全局 Python 包 而不是 Sublime Text 目录的 Python 包 Sublime Text使用自己的Python环境 而不是
  • 使用 pygame 显示 unicode 符号

    我检查了其他答案 但不明白为什么我的代码错误地显示 This is what I currently see https i stack imgur com 8tNIK png 这是关于文本渲染的相关代码 font pygame font
  • opencv水印周围的轮廓

    我想在图像中的水印周围画一个框 我已经提取了水印并找到了轮廓 但是 不会在水印周围绘制轮廓 轮廓是在我的整个图像上绘制的 请帮我提供正确的代码 轮廓坐标的输出为 array 0 0 0 634 450 634 450 0 dtype int
  • 使用 python 中的公式函数使从 Excel 中提取的值的百分比相等

    import xlrd numpy excel Users Bob Desktop wb1 xlrd open workbook excel assignment3 xlsx sh1 wb1 sheet by index 0 colA co
  • 补丁 - 为什么相对补丁目标名称不起作用?

    我已经从模块导入了一个类 但是当我尝试修补类名而不使用模块作为前缀时 出现类型错误 TypeError Need a valid target to patch You supplied MyClass 例如 以下代码给出了上述错误 imp
  • 如何检查python xlrd库中的excel文件是否有效

    有什么办法与xlrd库来检查您使用的文件是否是有效的 Excel 文件 我知道还有其他库可以检查文件头 我可以使用文件扩展名检查 但为了多平台性我想知道是否有任何我可以使用的功能xlrd库本身在尝试打开文件时可能会返回类似 false 的内
  • Kivy - 有所有颜色名称的列表吗?

    在 Kivy 中 小部件 color属性允许输入其值作为字符串颜色名称 也 例如在 kv file Label color red 是否有所有可能的颜色名称的列表 就在这里 来自Kivy 的文档 https kivy org doc sta
  • 删除 Django 1.7 中的应用程序(和关联的数据库表)

    是否可以使用 Django 1 7 迁移来完全删除 卸载应用程序及其所有跟踪 主要是其所有数据库表 如果没有 在 Django 1 7 中执行此操作的适当方法是什么 python manage py migrate
  • pyspark 数据框中的自定义排序

    是否有推荐的方法在 pyspark 中实现分类数据的自定义排序 我理想地寻找 pandas 分类数据类型提供的功能 因此 给定一个数据集Speed列 可能的选项是 Super Fast Fast Medium Slow 我想实现适合上下文的
  • 如何在 Python 中加密并在 Java 中解密?

    我正在尝试在 Python 程序中加密一些数据并将其保存 然后在 Java 程序中解密该数据 在Python中 我像这样加密它 from Crypto Cipher import AES KEY 1234567890123456789012
  • Keras:如何保存模型或权重?

    如果这个问题看起来很简单 我很抱歉 但是阅读 Keras 保存和恢复帮助页面 https www tensorflow org beta tutorials keras save and restore models https www t
  • 在 Django OAuth Toolkit 中安全创建新应用程序

    如何将 IsAdminUser 权限添加到 Django OAuth Toolkit 中的 o applications 视图 REST FRAMEWORK DEFAULT PERMISSION CLASSES rest framework
  • 结构差异 sudo() run('sudo 命令')

    我想知道函数之间有什么区别sudo 和函数run sudo u user smth 文档上有 sudo 在所有运行方式上都是相同的 除了它总是换行 调用 sudo 程序中的给定命令以提供超级用户 特权 但有几次 sudo cmd 提示我输入
  • 如果在等待“read -s”时中断,在子进程中运行 bash 会破坏 tty 的标准输出吗?

    正如 Bakuriu 在评论中指出的那样 这基本上与BASH 输入期间按 Ctrl C 会中断当前终端 https stackoverflow com questions 31808863 bash ctrlc during input b
  • 使用Python计算目录的大小?

    在我重新发明这个特殊的轮子之前 有没有人有一个很好的例程来使用 Python 计算目录的大小 如果例程能够很好地以 Mb Gb 等格式格式化大小 那就太好了 这会遍历所有子目录 总结文件大小 import os def get size s
  • Jython 和 SAX 解析器:允许的实体不超过 64000 个?

    我做了一个简单的测试xml saxJython 中的解析器在处理大型 XML 文件 800 MB 时遇到以下错误 Traceback most recent call last File src project xmltools py li
  • 动态过滤 pandas 数据框

    我正在尝试使用三列的阈值来过滤 pandas 数据框 import pandas as pd df pd DataFrame A 6 2 10 5 3 B 2 5 3 2 6 C 5 2 1 8 2 df df loc df A gt 0
  • python 线程安全可变对象复制

    Is 蟒蛇的copy http docs python org 2 library copy html模块线程安全吗 如果不是 我应该如何在 python 中以线程安全的方式复制 deepcopy 可变对象 蟒蛇的GIL http en w
  • 查找总和为给定数字的值组合的函数

    这个帖子查找提供的 Sum 值的组合 https stackoverflow com a 20194023 1561176呈现函数subsets with sum 它在数组中查找总和等于给定值的值的组合 但由于这个帖子已经有6年多了 我发这
  • 如何为不同操作系统/Python 版本编译 Python C/C++ 扩展?

    我注意到一些成熟的Python库已经为大多数架构 Win32 Win amd64 MacOS 和Python版本提供了预编译版本 针对不同环境交叉编译扩展的标准方法是什么 葡萄酒 虚拟机 众包 我们使用虚拟机和Hudson http hud

随机推荐

  • 使用 google gson 进行 json 对象序列化/反序列化

    我想将 java 对象序列化为 json 或从 json 反序列化 谷歌 gson 更好 让我有A类 class A int x 1 int y 2 然后 如果我调用 new Gson toJson new A 我将得到以下结果 x 1 y
  • Java - 在另一个线程中使用可变对象引用的首选设计?

    public class ObjectA private void foo MutableObject mo new MutableObject Runnable objectB new ObjectB mo new Thread obje
  • 使用 php sdk 在 facebook 中获取访问令牌时出错

    我正在使用的代码 fb new Facebook Facebook app id gt app id app secret gt app secret default graph version gt v2 6 helper fb gt g
  • 动态添加类后,jQuery 悬停处理函数在取消悬停时不起作用[重复]

    这个问题在这里已经有答案了 根据我的研究 我相信以下代码应该有效 我使用 jquery 动态地将图像添加到页面 它从 JSON 文件中提取这些图像 因此我需要使用 jQueryon http api jquery com on 方法来允许此
  • C99 中的易失性语义

    我对我正在编写的一些低级代码有疑问 我需要将对象用作易失性的 但这不一定是我希望将类型声明为易失性的 出于可重用性原因 然而 我可以定义指向结构的限定变体的指针 如下段所述 struct x int bar struct x foobar
  • 如何在express中重定向到post请求

    我正在创建一个登陆页面 点击该页面时会自动触发 Facebook 身份验证流程 但是 我无法自动从索引重定向到signup路线 如何从GET请求给一个POST要求快递 router get function req res redirect
  • 在列表框中搜索

    HI 我正在尝试将文本框放在列表框中进行搜索 我有一个 TextBox SearchText 其中包含以下代码 private void SearchText TextChanged object sender EventArgs e in
  • 如何获取意图服务中的上下文

    场景如下 我有一个 WakefulBroadcastReceiver 它执行以下操作 备份到网络计算机或云端 它设置为在 半夜 当我知道平板电脑可以访问 局域网 备份会将数据存储到实例化 WakefulBroadcastReceiver 的
  • visio 的 vba 编程

    目前 我正在IVR 交互式语音应答 系统工作 要在 IVR 中添加服务 我必须在 visio 中制作流程 该流程具有 IVR 系统卖家提供的预定义形状 形状是用 VBA 编程的 我决定学习VBA来修改预定义的形状 在google中搜索时 它
  • 属性更改时重新构建/重新渲染 Angular2 组件

    如何实施 我的子组件 import Component Input ngOnInit from angular2 core Component selector my component template div In child comp
  • 存储库名称作为 GitHub Action 环境变量?

    如何获取存储库名称 而不是用户或组织 作为 GitHub Actions 中的环境变量 我发现github repository但这包含所有者作为第一部分 如下所示 owner repo Try github event repositor
  • 如何控制 Honeycomb 中的软菜单按钮?

    我有一个应用程序 我想在其中关闭菜单按钮 我正在选择其他人的项目 并且不确定是什么引起了菜单按钮的出现 它没有 做任何事情 有没有办法手动关闭该图标 或者我必须首先找出它被显示的原因 请不要批评寻找解决方法 显然在理想的世界中 我会对代码足
  • C++11 std::bind 和 boost::bind 之间的区别

    两者有什么区别吗 或者我可以安全地替换每次出现的boost bind by std bind在我的代码中 从而消除对Boost的依赖 boost bind 关系运算符重载 http www boost org libs bind bind
  • 为 fa 圆添加边框

    如何给图片添加边框circleFont Awesome 的图标 其实我的结果是 http jsfiddle net 0jhdvj0k http jsfiddle net 0jhdvj0k 边框类似于省略号 而不是圆形边框 table cla
  • Jquery - 更改标签中的文本

    这是标签 有文字 使用 20 公里 使用 jquery 我想将文本 20 Kms 替换为 10 kms 我用手像这样贴上标签 label for applyDistanceSlab 我怎样才能做到这一点 label for applyDis
  • 在嵌套对象内搜索文本(以 Backbone.js 集合为例)

    我有一个backbone js 集合 我需要在其中进行全文搜索 我手头的工具如下 Backbone js 下划线 js jQuery 对于那些不熟悉主干的人 骨干集合只是一个对象 在集合内有一个包含模型的数组 每个模型都有一个带有属性的数组
  • CMake Qt UIC 失败

    我目前正在将我的项目从 qmake 移植到 CMake 并且我遇到了 Qt UIC 的问题 它尝试处理不存在的 UI 文件 而不是我希望它处理的实际文件 我有以下文件层次结构 CMakeLists txt MyProject pro mai
  • Visual Studio 解决方案——有什么方法可以创建“特殊”文件夹吗?

    基本上 我希望我的一个文件夹作为一种 特殊文件夹 出现在其他文件夹上方 类似于 属性 如何拥有自己的特殊位置 即使它是一个文件夹 与 App Data 等相同 这可能吗 默认情况下 Visual Studio 不支持添加特殊项目文件夹 Pr
  • 对外界隐藏内部服务以确保使用正确的高级服务[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在一个电子商务网站上工作 我有广告实体 其中包括属性和照片 属性写入数据库 照片存储在文件系统中 我创建了一个WriterService
  • 在 Dash/Plotly 中显示属性会导致 KeyError

    我正在尝试可视化文档中的引用 为此 我有Elements csv 看起来像这样 Doc Description DocumentID SOP Laboratory This SOP should be used in the lab 104