底图上没有绘制带有networkx的虚线

2024-01-11

我尝试用以下方法绘制虚线边缘networkx on a basemap线。一切都很好,除了style= 'dotted'。设置此标志后,没有任何更改。我仍然得到正常的实心边缘。有人知道我可以改变什么来在地图上得到虚线吗?我的错误在哪里?

这是我的完整脚本:

import networkx as nx
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
import pandas as pd
geodict={'ID': {0: 1, 1: 2, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10, 10: 11, 11: 12, 12: 13, 13: 14, 14: 15, 15: 16, 16: 17, 17: 18, 18: 19, 19: 20, 20: 21, 21: 22}, 'Name': {0: 'Bremen', 1: 'Passau', 2: 'Wolgagebiet', 3: 'Ellis Island', 4: 'Nebraska', 5: 'Berlin', 6: 'Prag', 7: 'München', 8: 'Frankfurt am Main', 9: 'Dresden', 10: 'Bresslau', 11: 'Königsberg', 12: 'Moskau', 13: 'Warschau', 14: 'Buenos Aires', 15: 'Chicago', 16: 'Philadelphia', 17: 'Cleveland', 18: 'Detroit', 19: 'Milwaukee', 20: 'Baltimore', 21: 'Rio de Janeiro'}, 'lat': {0: 53.075878, 1: 48.573333, 2: 51.7, 3: 40.698611, 4: 41.583333, 5: 52.518611, 6: 50.088611, 7: 48.137221999999994, 8: 50.110556, 9: 51.049259, 10: 51.11, 11: 54.733332999999995, 12: 55.75, 13: 52.216667, 14: -34.599722, 15: 41.881944, 16: 39.952222, 17: 41.482222, 18: 42.3316, 19: 43.052222, 20: 39.286389, 21: -22.908333}, 'lng': {0: 8.807311, 1: 13.456944, 2: 46.75, 3: -74.04, 4: -99.583333, 5: 13.408332999999999, 6: 14.421389000000001, 7: 11.575556, 8: 8.682222, 9: 13.73836, 10: 17.032222, 11: 20.483333, 12: 37.616667, 13: 21.033333, 14: -58.381944, 15: -87.627778, 16: -75.163889, 17: -81.669722, 18: -83.0475, 19: -87.955833, 20: -76.615, 21: -43.196389}, 'Anz': {0: 1, 1: 1, 2: 1, 3: 1, 4: 1, 5: 0, 6: 0, 7: 0, 8: 0, 9: 0, 10: 0, 11: 0, 12: 0, 13: 0, 14: 0, 15: 0, 16: 0, 17: 0, 18: 0, 19: 0, 20: 0, 21: 0}}
geopos= pd.DataFrame.from_dict(geodict)
position={}
m = Basemap(projection='ortho',lon_0=-20,lat_0=30,resolution='l')
m.shadedrelief()

font = {'family': 'serif',
        'color':  'black',
        'weight': 'normal',
        'size': 12,
        }
for line in geopos.itertuples():
    position[line.Name] = m(line.lng, line.lat)
    if line.Anz==1:
        if line.Name=='Nebraska':
            plt.text(position[line.Name][0] - 150000, position[line.Name][1] + 100000, line.Name, font)
        elif line.Name == 'Bremen':
            plt.text(position[line.Name][0] - 250000, position[line.Name][1] - 200000, line.Name, font)
        else:
            plt.text(position[line.Name][0] - 200000, position[line.Name][1] - 180000, line.Name, font)
G=nx.DiGraph()
G2=nx.DiGraph()
G.add_node('Bremen',weight=10, label='Bremen')
G.add_node('Wolgagebiet',weight=1)
G.add_node('Passau',weight=1)
G.add_node('Ellis Island',weight=10)
G.add_node('Nebraska',weight=1)
G2.add_node('Passau',weight=1)
G2.add_node('Ellis Island',weight=10)
G2.add_node('Berlin',weight=1)
G2.add_node('Prag',weight=1)
G2.add_node('München',weight=1)
G2.add_node('Frankfurt am Main',weight=1)
G2.add_node('Dresden',weight=1)
G2.add_node('Bresslau',weight=1)
G2.add_node('Königsberg',weight=1)
G2.add_node('Moskau',weight=1)
G2.add_node('Warschau',weight=1)
G2.add_node('Buenos Aires',weight=1)
G2.add_node('Chicago',weight=1)
G2.add_node('Philadelphia',weight=1)
G2.add_node('Cleveland',weight=1)
G2.add_node('Detroit',weight=1)
G2.add_node('Milwaukee',weight=1)
G2.add_node('Baltimore',weight=1)
G2.add_node('Rio de Janeiro',weight=1)

G.add_edge('Wolgagebiet','Bremen')
G.add_edge('Passau','Bremen')
G.add_edge('Bremen','Ellis Island')
G.add_edge('Ellis Island', 'Nebraska')

G2.add_edge('Berlin','Bremen')
G2.add_edge('Prag','Bremen')
G2.add_edge('München','Bremen')
G2.add_edge('Frankfurt am Main','Bremen')
G2.add_edge('Dresden','Bremen')
G2.add_edge('Bresslau','Bremen')
G2.add_edge('Königsberg','Bremen')
G2.add_edge('Moskau','Bremen')
G2.add_edge('Warschau','Bremen')
G2.add_edge('Bremen','Buenos Aires')
G2.add_edge('Ellis Island','Chicago')
G2.add_edge('Ellis Island','Philadelphia')
G2.add_edge('Ellis Island','Cleveland')
G2.add_edge('Ellis Island','Detroit')
G2.add_edge('Ellis Island','Milwaukee')
G2.add_edge('Ellis Island','Baltimore')
G2.add_edge('Bremen','Rio de Janeiro')

pos = dict((land, position[land]) for land in G.nodes())
pos2 = dict((land, position[land]) for land in G2.nodes())
print(G.edges)
lllon = -80
urlon = 80
lllat = 20
urlat = 50

xmin, ymin = m(lllon, lllat)
xmax, ymax = m(urlon, urlat)

ax = plt.gca()

ax.set_xlim([xmin, xmax])
ax.set_ylim([ymin, ymax])

nx.draw_networkx_nodes(G2, pos2, with_labels=True,node_size=[[10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10]],node_color='grey')
nx.draw_networkx_edges(G2, pos2, width = 1,style='dotted',edge_color='grey')
nx.draw_networkx_nodes(G, pos, with_labels=True,node_size=[[200, 20, 20, 200, 20]],node_color='red')
nx.draw_networkx_edges(G, pos, color='white', width = [7,3,3,3,3],style='dashdot',edge_color='b')
plt.show()

对我来说,这闻起来非常像一个错误——也许你应该把它和networkx开发商。现在,我找到了一个解决方法。打电话时help(nx.draw_networkx_edges),您会得到以下信息:

Returns

matplotlib.collection.LineCollectionLineCollection的边缘

matplotlib.patches.FancyArrowPatch 列表FancyArrowPatch有向边的实例

取决于绘图是否包含箭头。

The Networkx 文档页面 https://networkx.github.io/documentation/networkx-1.10/reference/generated/networkx.drawing.nx_pylab.draw_networkx_edges.html顺便说一句,不要提及第二种可能性。无论如何,当你使用箭头时,你可以检索所说的list of FancyArrowPatchs 并“手动”设置这些线条的样式。简而言之,如果您像这样更改代码的最后几行:

collection = nx.draw_networkx_edges(G2, pos2, width = 2,edge_color='grey')
for patch in collection:
    patch.set_linestyle('dotted')

nx.draw_networkx_nodes(G, pos, with_labels=True,node_size=[[200, 20, 20, 200, 20]],node_color='red')

collection = nx.draw_networkx_edges(G, pos, color='white', width = [7,3,3,3,3],edge_color='b')
for patch in collection:
    patch.set_linestyle('dashdot')

plt.show()

你得到你的虚线:

在 python 3.6 上测试(2.7 给我一个关于字符编码的错误)。希望这可以帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

底图上没有绘制带有networkx的虚线 的相关文章

随机推荐

  • 创建指向文件的指针数组

    我将如何在 C 中创建文件指针数组 我想创建一个指向 main 参数的文件指针数组 如 a1 txt a2 txt 等 所以我会运行 prog arg1 txt arg2 txt arg3 txt让程序使用这些文件 那么 main 的参数是
  • D 有 HTML 解析吗?

    我正在寻找 D 语言的 HTML 解析 如果可能的话 支持 XPath 我做了一些谷歌搜索 但没有运气 很难找到带有 D 关键字的解决方案 就像C 我说 C 谷歌说C On http www dsource org http www dso
  • 仅显示一周(开放时间,每周相同)

    我想知道是否可以只显示一周 使用此日历来显示商店的营业时间 So 我不想显示日期 仅显示日期名称 好的 我不想对当天进行着色 好的 我希望日历始终显示在同一周 gt 我不知道该怎么做 你有什么想法吗 可以这样做吗 多谢 如果您使用 goTo
  • 通过 PHP CURL POST 数据并重定向用户

    我们需要将用户重定向到某个 URL 并使用 PHP CURL 将一些数据发送到该 URL POST 与用户单击 HTML 表单并使用 POST 方法提交时完全相同 我们的代码是 data array Token gt test2 Redir
  • 在单独的行上返回 Redshift JSON 数组的元素

    我有一个 Redshift 表 如下所示 id metadata 1 pet dog country uk 2 pet cat 3 4 country germany education masters country belgium 所有
  • Dask 在 Groupby 上复制 Pandas 值

    我想做的是在 dask 中复制 panda 的值计数 idxmax 函数 因为我有很多数据 这是一个示例数据框 partner num cust id item id revw ratg num revw dt item qty 0 100
  • Mathematica:FindRoot 求公切线

    我问这个question https stackoverflow com questions 8592200 mathematica tangent of two curves不久前 这确实有助于达成解决方案 我已经找到了一种可以接受的方法
  • 使用 WCF 和同步框架通过 HTTP 同步 SQL Server 2008 数据库

    这里有人使用过 Sync Framework 并通过 WCF 端点进行同步吗 请分享代码示例或示例项目 我专门寻找离线场景 其中客户端上线只是为了从服务器获取更新 我执行了以下操作以使同步框架使用 WCF 与 SQL Server 2008
  • 为什么 Stream#toList 的默认实现看起来过于复杂/次优?

    查看实施情况Stream toList 我只是注意到它看起来是多么过于复杂和次优 就像上面的 javadoc 中提到的那样 这default大多数人不使用实现Stream然而 在我看来 实施情况可能会有所不同 来源 Accumulates
  • 是否有任何本地函数可以将 json 转换为 url 参数?

    我需要将 json 对象转换为 url 形式 例如 parameter 12 asd 1 我完成了这个 var data action actualiza resultado postID 1 gl 2 gl2 3 var string J
  • 更新@HostBinding Angular 4动画

    我正在尝试在 Angular 4 项目中工作的路线之间获取动画 但需要能够根据用户在应用程序中导航的方式更改动画的方向 translateX 我发现将进入和退出组件保留在 DOM 中的唯一方法是使用 void 状态 另外 我必须将动画绑定到
  • 使用超链接集成 UPI 后如何获得响应

    在我的 iOS 应用程序中 我需要接受用户的付款 我正在使用 UPI 来实现同样的目的 我已遵循 UPI 提供的以下文件 http www npci org in documents UPI Linking Specs ver 1 1 dr
  • 如何在 iOS 中从 Live Photo 获取视频

    我试图弄清楚 但找不到任何有用的信息 我只找到这个 PHAssetResourceManager defaultManager writeDataForAssetResource assetRes toFile fileURL option
  • Android导出签名应用程序包错误

    当我尝试导出 Google 地图的签名应用程序包时 我的 resvalue string xml 文件上出现此错误 我应该怎么办 app name is not translated in af am ar be bg ca cs da d
  • 获取父级及其所有子级的数组

    假设我有这样的数据 data id 1 parentId thisPostId topLevelId 1 text p comment p id 2 parentId 1 topLevelId 1 text p reply to comme
  • 无法解析:com.osbcp.cssparser:cssparser:1.5 HtmlSpanner-NightWhistler

    我综合了html扳手进入我的 Android 应用程序 我收到以下错误 无法解析 com osbcp cssparser cssparser 1 5 我该如何解决这个错误 感谢帮助 该库不在标准中Maven存储库 即Gradle用于解决依赖
  • 在 MySQL 中导入 CSV 数据时空整数字段的默认值

    我正在将 CSV 导入到 MySQL 表中LOAD DATA INFILE 表的字段之一存储邮政编码数据 我已在表结构中定义了该数据contributor zipcode INT 在 CSV 中 此字段有时为空 当我执行LOAD查询时 My
  • System.Diagnostics.Stopwatch 的准确度如何?

    有多准确系统 诊断 秒表 我正在尝试为不同的代码路径做一些指标 并且我需要它是准确的 我应该使用秒表还是有其他更准确的解决方案 有人告诉我 有时秒表会给出不正确的信息 我刚刚写了一篇文章 解释了如何进行测试设置才能使秒表获得高精度 优于 0
  • 下移工作目录中的文件夹

    我正在尝试直接在 R 中向下移动工作目录 例如 我有一个 foo bar 工作目录 我想移动到 foo bar 子文件夹 setwd Users foo bar getwd 1 Users foo bar setwd subfolder 然
  • 底图上没有绘制带有networkx的虚线

    我尝试用以下方法绘制虚线边缘networkx on a basemap线 一切都很好 除了style dotted 设置此标志后 没有任何更改 我仍然得到正常的实心边缘 有人知道我可以改变什么来在地图上得到虚线吗 我的错误在哪里 这是我的完