在matplotlib中连接两个Sankey图

2024-04-29 04:20:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用matplotlib来代表一个国家的天然气平衡。在

我的想法是,有三种进口天然气的来源,我想用一个Sankey绘制出来,并将其连接到另一个Sankey,后者有其他天然气来源(生产、天然气储存)和天然气消费者作为流出。在

我试了很多次,但我不能把两个图连在一起。在

每幅图都按设计分别绘制。但是一旦我加上"prior=0, connect=(3,0)"它本该把两个图连接在一起,一切就出了问题,给了我一些我无法完全理解的错误。这是密码。在

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.sankey import Sankey


ImportLabels=["Imports by\nNaftogaz","Imports by\nOstchem","Imports from\nEurope", ""]
ImportFlows=[11.493,9.768,1.935,-23.196]
ImportOrientation=[0,1,-1,0]

l=["Imports","Private\nextraction","State\nextraction","Net supplies\ntoUGS","Households","TKE","Metallurgy","Energy","Other\nIndustries","Technological\nlosses"]
v=[23.196,3.968,13.998,-2.252,-13.289,-7.163,-3.487,-4.72,-7.037,-3.17]
d=[0,-1,1,-1,0,0,1,1,1,-1]

sankey=Sankey(scale=1.0/69,patchlabel="Gas balance",format='%.1f',margin=0.15)
sankey.add(flows=ImportFlows, labels=ImportLabels, orientations=ImportOrientation, label='Imports',fc='#00AF00')
sankey.add(flows=v,labels=l,orientations=d, prior=0, connect=(3,0),label='Second',fc='#008000')

其思想是将第一个图形中的3个流出(值为-23.196)与第二个sankey的0流入(也有23.196)连接起来

下面是错误文本:

^{pr2}$

所以我不确定两个图之间的连接是否有问题桑基.pyc是试图显示)还是matplotlib本身有问题,如"TypeError: not enough arguments for format string"所示?在


Tags: fromimportbymatplotlibasconnect错误来源
1条回答
网友
1楼 · 发布于 2024-04-29 04:20:48

您的问题是您正在进行两个.add()调用。对Sankey()的第一次调用已经构建了一个关系图(默认为灰色,有1个流入和1个流出)。因此,当您尝试连接到第一个图时,它失败了,因为它只有一个流,而您正试图连接到第三个流。(它无论如何都会失败,因为流不匹配。)

您需要在第一个调用中设置第一个关系图,并且只有一个add调用,例如:

sankey = Sankey(scale=1.0/69,patchlabel="Gas balance",format='%.1f',margin=0.15,
                flows=ImportFlows, labels=ImportLabels, 
                orientations=ImportOrientation, label='Imports',fc='#00AF00')
sankey.add(flows=v,labels=l,orientations=d, label='Second',fc='#008000', prior=0,
           connect=(3, 0))

这给了我: enter image description here

相关问题 更多 >