2017-07-28 17 views
0

以下のコードで、pdfに保存したい図形を作成しました。bbox_inches = 'tight'でpad_inchesに目的の効果がない場合、3D pdfプロット(savefig)の空白を削除する

enter image description here

fig.savefig("Surface_I.pdf", bbox_inches='tight')ソリューションは削除せずに、xz情報のビットをカット:

fig.savefig("Surface_I.pdf") 

pdfファイルがleftにホワイトスペースを多く含んでおり、up:私はsavefigコマンドを使用します余分なスペースをlefttopから

enter image description here

fig.savefig("Surface_I.pdf", bbox_inches='tight', pad_inches=0.3)ソリューションは、単に削除インフォ固定、いくつかのスペースを追加します。

enter image description here

をあまりにも多くのスペースはlefttopに依然として存在しています。

lefttopの空白をpdfから削除する方法はありますか?

注:これらの写真はすべて、生成されたpdfのスクリーンショットです。

コード:以下のコード内のリスト国境変更する

import numpy as np 
from mpl_toolkits.mplot3d import Axes3D 
import matplotlib.pyplot as plt 

# Function: 
z_fit = a0 + a1*yy + a2*xx + a3*yy**2 + a4*xx**2 + a5*xx*yy 

# Parameters: 
a0 = -941.487789948 
a1 = 0.0146881652963 
a2 = -2.53533353374e-05 
a3 = -9.64343252786e-05 
a4 = -2.47416662598e-08 
a5 = 3.77136886946e-07 

x_mesh = np.linspace(10.0000000000000, 2000.0000000000000, 20) 
y_mesh = np.linspace(-4.4119598462100, 10.8557347078000, 20) 

xx, yy = np.meshgrid(x_mesh, y_mesh) 


# Plot the function 
fig = plt.figure() 
ax = fig.gca(projection='3d') 

ax.plot_surface(xx, yy, z_fit, color='b', alpha=0.5) 

ax.set_xlabel('\nx') 
ax.set_ylabel('y') 
ax.set_zlabel('\nzzzzz zzz', linespacing=3) 
ax.set_title('\n\nSurface I', linespacing=3) 
xlabels=[0, 250, 500, 750, 1000, 1250, 1500, 1750, 2000] 
ax.set_xticklabels(xlabels,rotation=90, 
        verticalalignment='baseline',#)#, 
        horizontalalignment='left') 

ylabels = [-4, -2, 0, 2, 4, 6, 8, 10] 
ax.set_yticklabels(ylabels,rotation=0, 
        verticalalignment='baseline')#, 
#     horizontalalignment='left') 


fig.savefig("Surface_I.pdf", bbox_inches='tight', pad_inches=0.3) 
+0

を理解するだろう、私はトムによって解答に示すように、何をしたいことは、あなた自身のバウンディングボックスを設定することだと思います[この質問](https://stackoverflow.com/questions/41225293/remove-white-spaces-in-axes3d-matplotlib)おそらく、[この質問]のようにサブプロットのパラメータを調整するだけでも十分です(https://stackoverflow.com/questions/38604100/matplotlib-3d-plot-how-to-rid-of-the-excessive-white-スペース?noredirect = 1&lq = 1) – ImportanceOfBeingErnest

答えて

0

てみてください(数値デバイスに国境= [xminから、YMIN、XMAX、YMAX]は座標) それはあなたが軸AX0を作成する少しトリッキーですサイズの国境リスト とあなたの中には、3次元図のための軸を追加します。 国境を試す= [-0.5,0,1.5,1]このリストの役割に

import numpy as np 
from mpl_toolkits.mplot3d import Axes3D 
import matplotlib.pyplot as plt 

# Parameters: 
a0 = -941.487789948 
a1 = 0.0146881652963 
a2 = -2.53533353374e-05 
a3 = -9.64343252786e-05 
a4 = -2.47416662598e-08 
a5 = 3.77136886946e-07 

x_mesh = np.linspace(10.0000000000000, 2000.0000000000000, 20) 
y_mesh = np.linspace(-4.4119598462100, 10.8557347078000, 20) 

xx, yy = np.meshgrid(x_mesh, y_mesh) 

# Function: 
z_fit = a0 + a1*yy + a2*xx + a3*yy**2 + a4*xx**2 + a5*xx*yy 


def axesborder(border): 
    # border = [xmin,ymin,xmax,ymax] 
    # return [xmin,ymin,dx,dy] 
    return [border[0],border[1],border[2]-border[0],border[3]-border[1]] 

# Plot the function 
fig = plt.figure(1) 
fig.set_size_inches((16,9), forward=True) 
border = [-0.1,0,1.05,1] 
#border = [0,0,1,1] 
ax0 = fig.add_axes(axesborder(border)) 
ax0.set_axis_off() 

ax = fig.add_axes(ax0.get_position(),projection='3d',zorder = 1) 

ax.plot_surface(xx, yy, z_fit, color='b', alpha=0.5) 

ax.set_xlabel('\nx') 
ax.set_ylabel('y') 
ax.set_zlabel('\nzzzzz zzz', linespacing=3) 
ax.set_title('\n\nSurface I', linespacing=3) 
xlabels=[0, 250, 500, 750, 1000, 1250, 1500, 1750, 2000] 
ax.set_xticklabels(xlabels,rotation=90, 
        verticalalignment='baseline',#)#, 
        horizontalalignment='left') 

ylabels = [-4, -2, 0, 2, 4, 6, 8, 10] 
ax.set_yticklabels(ylabels,rotation=0,verticalalignment='baseline') 

plt.show() 

plt.savefig('test.pdf') 
関連する問題