Python Sankey图表matplotlib保存比例问题

Python Sankey图表matplotlib保存比例问题,python,matplotlib,scale,sankey-diagram,Python,Matplotlib,Scale,Sankey Diagram,使用matplotlib从wikipedia生成数据的Sankey图表(看起来很糟糕的数据,但我想我会找出代码,然后再去寻找更好的数据)。我似乎无法使文件正确缩放 它在macOS 10.12.4的系统Python.app中显示良好,简单示例保存良好,但添加scale=0.0001似乎以某种方式破坏了plt.savefig()。我已尝试更改dpi参数,但它似乎根本不会影响结果。我还尝试将scale参数添加到savefig中,但这似乎没有任何作用(甚至没有破坏它?) 我可以从Python.app保存

使用
matplotlib
从wikipedia生成数据的Sankey图表(看起来很糟糕的数据,但我想我会找出代码,然后再去寻找更好的数据)。我似乎无法使文件正确缩放

它在macOS 10.12.4的系统
Python.app
中显示良好,简单示例保存良好,但添加
scale=0.0001
似乎以某种方式破坏了
plt.savefig()
。我已尝试更改
dpi
参数,但它似乎根本不会影响结果。我还尝试将
scale
参数添加到
savefig
中,但这似乎没有任何作用(甚至没有破坏它?)

我可以从
Python.app
保存它,它看起来很好,但我真的很想弄清楚到底出了什么问题

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

fig = plt.figure(figsize = (13, 7), frameon = False)
ax = fig.add_subplot(1, 1, 1, xticks = [], yticks = [], title='Global Electricity Production & Consumption 2005'
                     )
g = [-12192, 6157, 1960, 387, 2383, 1240]              # generated
c = [4250, -7942, -1418, -1266, -1017, -8.79]          # consumed
sankey = Sankey(ax = ax, 
        format = '%.5G', 
        head_angle = 135,  
        unit = ' TWh', 
        gap = 0.3, 
        scale = 0.0001,
        margin = 0.0,
        offset = 0.2,
        shoulder = 0.0)

sankey.add(
    patchlabel = 'Production',
    flows = g,
    orientations = [0, 0, -1, -1, 1, 1], 
    labels = [None, 'Coal', 'Natural Gas', 'Petroleum', 'Nuclear', 'Renewable'],
    pathlengths = [0.0, 0.2, 0.2, 0.6, 0.2, 0.2]
    )

sankey.add(
    flows = [12192, -4250, -7942],
    orientations = [0, 0, -1],
    labels = [None, None, 'Conversion Losses'],
    pathlengths = [-.2, -.2, 0.4],
    # trunklength = 1.0,
    prior = 0,
    connect = (0, 0))       # denotes which flow index from the prior to connect to which flow index in this one

sankey.add(
    patchlabel = 'Gross Generation\n4250 TWh',
    flows = [4250, -1418, -1266, -1017, -8.79, -541],
    orientations = [0, 0, -1, 1, -1, 1],
    labels = [None, 'Residential', 'Commercial', 'Industrial', 'Transportation', '?'],
    prior = 1,
    pathlengths = [0.2, 0.2, 0.2, 0.2, 0.7, 0.2],
    # trunklength = 2.5,
    connect = (1, 0)
)


plt.savefig('./Global_Electrical_Energy_Prod_Cons_2005.png', 
                dpi = 300, 
                frameon = None,
                transparent = True,
                scale = 0.0001)
sankey.finish()
plt.show()
plt.show()
启动的
Python.app
保存的预期结果

令人困惑的结果(编辑:这是加扰的,但这是因为它仍然被设置为300 dpi,使用默认设置让stackoverflow正确显示)。我刚刚尝试了
.pdf
.svg
,得到了相同的结果


保存sankey绘图之前,您需要完成它。更改这些行的顺序:

sankey.finish()
plt.savefig(...)

您需要在保存sankey绘图之前完成它。更改这些行的顺序:

sankey.finish()
plt.savefig(...)

也许在调用
sankey.finish()
后尝试保存?好主意!我希望我曾经想过尝试一下,但看起来它也不起作用,同样的结果。你确定吗?当我运行代码时,它确实修复了…实际上,不,我不确定!我刚刚意识到我在错误的文件中编辑了它(我复制了代码开始添加新数据,但仍然运行原始文件),我现在无法测试它,因为我的计算机刚刚因内存问题冻结,但我应该能够在一分钟内检查它-听起来很有希望,谢谢!在保存之前,确实需要完成sankey绘图。请注意,
savefig
没有
scale
参数,因此最好不要使用该参数。调用
sankey.finish()
后尝试保存。好主意!我希望我曾经想过尝试一下,但看起来它也不起作用,同样的结果。你确定吗?当我运行代码时,它确实修复了…实际上,不,我不确定!我刚刚意识到我在错误的文件中编辑了它(我复制了代码开始添加新数据,但仍然运行原始文件),我现在无法测试它,因为我的计算机刚刚因内存问题冻结,但我应该能够在一分钟内检查它-听起来很有希望,谢谢!在保存之前,确实需要完成sankey绘图。只需提及,
savefig
没有
scale
参数,因此最好不要使用该参数。