2015-09-07 9 views
2

Почему цвет поверхности будет меняться с 1-го на второй по цвету?Цвет поверхностных участков, черных после сохранения-Python

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() 
+0

какая разница в том, как вы создали два участка? – maxymoo

+0

Theyre тот же сюжет, однако первый - это скриншот того, как он выглядит, прежде чем я его сохраню. Второй - после сохранения. Извините, я не понял, что – malonej

+0

Какой формат/размер вы его сохраняете, как вы пытались увеличить размер изображения? Похоже, что точки слишком малы, чтобы их можно было показать, и их уничтожают при сохранении изображения. – Serdalis

ответ

1

Это выглядит как проблема разрешения: линии в сохраненном участке слишком толстые и доминируют над цифра при сохранении, превращая ее в черный цвет. Разрешение по умолчанию сохраненной фигуры и цифры, созданной с помощью plt.show, вероятно, различны в вашем файле matplotlibrc.

Вы можете попробовать либо увеличить разрешение (точек на квадратный дюйм, либо dpi) или уменьшить ширину линии.

Несколько возможных вариантов для вас:

Увеличение точек на дюйм с rcParams

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

Если вы не хотите использовать 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)