我正在尝试使用matplotlib代表一个国家的天然气平衡。

我的想法是,我想使用一个Sankey绘制三​​种进口天然气源,并将其连接到另一个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)联系起来。

这是错误文本:

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-24-1220fede42ce> in <module>()
     14 sankey=Sankey(scale=1.0/69,patchlabel="Gas balance",format='%.1f',margin=0.15)
     15 sankey.add(flows=ImportFlows, labels=ImportLabels,  orientations=ImportOrientation, label='Imports',fc='#00AF00')
---> 16 sankey.add(flows=v,labels=l,orientations=d, prior=0, connect=(3,0),label='Second',fc='#008000')

C:\Python27\lib\site-packages\matplotlib\sankey.pyc in add(self, patchlabel, flows, orientations, labels, trunklength, pathlengths, prior, connect, rotation, **kwargs)
    369                    ("The connection index to the source diagram is %d, but "
    370                     "that diagram has only %d flows.\nThe index is zero-based."
--> 371                     % connect[0], len(self.diagrams[prior].flows))
    372             assert connect[1] < n, ("The connection index to this diagram is "
    373                                     "%d, but this diagram has only %d flows.\n"

TypeError: not enough arguments for format string


因此,我不确定两个图形之间的连接是否有问题(由sankey.pyc试图显示的文本建议)还是matplotlib本身出了问题,如"TypeError: not enough arguments for format string"所示?

最佳答案

您的问题是您要发出两个.add()调用。第一次调用Sankey()已经建立了一个图表(默认为灰色,有1个流入和1个流出)。因此,当您尝试连接到第一个流程图时,它会失败,因为它只有一个流程,并且您试图连接到第三个流程。 (由于流量不匹配,无论如何它都会失败。)

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

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))


这给了我:

关于python - 在matplotlib中连接两个Sankey图,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20425103/

10-10 11:01