2017-05-01 17 views
0

matplotlibを使用すると、ウィキペディアのデータのSankey図が生成されます(本当に悪いデータのように見えますが、コードを見つけ出してより良いデータを探しているように思えました)。そして、ファイルを正確に拡大することができないようです。サンキーダイアフラムmatplotlib節約問題

それディスプレイ MacOSの10.12.4でシステムPython.appplt.show()と罰金、および細かい保存簡単な例が、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から保存された期待される結果。

The expected result (saved from Python.app)

不可解な結果(編集は:これは、スクランブルされましたが、それはデフォルトを使用して、まだ300 dpiの設定にstackoverflowのは、それを正しく表示できたので、それがありました)。私はちょうど.pdf.svgを試して、同じ結果を得ました。

The result of the save line

+3

'sankey.finish()'を呼び出した後で保存しようとしていますか? – gereleth

+0

素晴らしいアイデア!私はそれを試してみたいと思っていましたが、どちらもうまくいきませんでした。 – Cody

+2

本当ですか?それはコードを実行するとそれを修正します... – Paul

答えて

2

あなたはそれを保存する前にサンキープロットを完了する必要があります。

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