使用Tweepy和NetworkX绘制Twitter用户关系图遇RuntimeError报错求助
问题:NetworkX绘图报错RuntimeError: Could not convert glyph to bitmap
我正在学习用tweepy和networkx研究Twitter用户间的关系,已经基于自己的账号及关注者创建了图结构,但调用绘图代码时出现报错:
RuntimeError: In draw_glyphs_to_bitmap: Could not convert glyph to bitmap (error code 0x62)
排查无果,网上也没找到解决方案,想请教是不是代码的问题?我的代码如下:
api = tweepy.API(auth) my_user = api.get_user(screen_name='my_user') my_followers = [] for friend in my_user.friends(): my_followers.append(friend.screen_name) G = nx.Graph() first_node = G.add_node(my_user) for user in my_followers: G.add_node(user) nx.draw(G, with_labels=True, font_weight='bold') plt.show() #Here is where I get the error
解决方案
你的代码里有两个关键问题会触发这个报错:
节点类型不统一
你添加的第一个节点是tweepy.models.User对象(my_user),但后续添加的都是字符串类型的用户名。NetworkX绘图时解析对象标签会出现字符渲染异常,这就是报错的核心原因。修正方式:把第一个节点换成用户名字符串:
G.add_node(my_user.screen_name)图结构缺失边,可优化渲染参数
当前图里只有孤立节点,绘图时容易出现布局或渲染异常。建议添加你和每个关注用户的边,让图结构更合理:for user in my_followers: G.add_edge(my_user.screen_name, user)另外,可指定matplotlib支持的字体,避免字符渲染问题:
nx.draw(G, with_labels=True, font_weight='bold', font_family='Arial')
修正后的完整代码:
api = tweepy.API(auth) my_user = api.get_user(screen_name='my_user') my_username = my_user.screen_name my_followers = [] for friend in my_user.friends(): my_followers.append(friend.screen_name) G = nx.Graph() G.add_node(my_username) for user in my_followers: G.add_node(user) G.add_edge(my_username, user) # 添加用户间的关联边 nx.draw(G, with_labels=True, font_weight='bold', font_family='Arial') plt.show()
内容的提问来源于stack exchange,提问作者eneko valero
相关产品推荐
相关产品推荐

