表面图的颜色在保存后变成黑色 - Python

时间:2015-09-07 22:48:25

标签: python matplotlib

为什么我的表面会在颜色方面将颜色从第1个变为第二个?

pre-save

post-save

以下是我的情节代码:

def Plots3d(U):

    fig = plt.figure()
    ax = fig.gca(projection='3d')
    y, x = U.shape

    Y = np.arange(0, y, 1)
    X = np.arange(0, x, 1)
    Y, X = np.meshgrid(Y, X)
    Z = U[Y, X]
    ax.plot_surface(X, Y, Z, rstride=1, cstride=1, 
        linewidth=0.7, antialiased=False, cmap = cm.summer)

    plt.xlabel('Stock Price Nodes')
    plt.ylabel('Timesteps')
    plt.title('Analytical solution surface for 0 <= t <= 2')
    plt.show()

1 个答案:

答案 0 :(得分:1)

这看起来像一个分辨率问题:保存的图中的线条太厚,在保存时会占据图形,将其变为黑色。使用plt.show生成的已保存图形和图形的默认分辨率可能与matplotlibrc文件不同。

您可以尝试提高分辨率(每平方英寸点数,或dpi)或降低线宽。

为您提供一些可能的选择:

使用rcParams

增加dpi
from matplotlib import rcParams
# this changes the dpi of figures saved from plt.show() 
rcParams['figure.dpi'] = 300 
# this changes the dpi of figures saved from plt.savefig()
rcParams['savefig.dpi'] = 300 

在savefig期间增加dpi

如果您不想使用rcParams,可以在保存数字时增加dpi:

plt.savefig('myfigure.png', dpi=300)

减少线宽

或者,您可以尝试减小曲面图的线宽

ax.plot_surface(X, Y, Z, rstride=1, cstride=1, 
    linewidth=0.3, antialiased=False, cmap = cm.summer)