Las Edgelines se desvanecen en mplot3d surf cuando se especifican los colores de la cara

He producido la siguiente plot de superficie en matlab:

Figura de Matlab

y necesito crear esto en .NET en su lugar. Espero usar IronPython para hacer esto. Pero primero estoy tratando de crear la ttwig en Python (PyLab). Esto es lo que tengo hasta ahora:

Figura de pitón

Por favor, eche un vistazo a mi código y dígame cómo puedo hacer que Python muestre las líneas del borde negro. Parece que estos desaparecen cuando agrego la facecolors=UWR(heatmap) a la facecolors=UWR(heatmap) surf(...) . ¿Es esto un error en mplot3d o es por diseño? De cualquier manera, ¿cómo puedo recuperar las líneas?

Aquí está mi código (Disculpas por las enormes matrices de datos):

 from mpl_toolkits.mplot3d import Axes3D from matplotlib import cm from matplotlib.ticker import LinearLocator, FormatStrFormatter import matplotlib.pyplot as plt import matplotlib from pylab import * import numpy as np fig = plt.figure() ax = fig.gca(projection='3d') #Sample colour data heatmap = np.array([(0.304, 0.288, 0.284, 0.26, 0.248, 0.224, 0.204, 0.184, 0.18, 0.18, 0.156, 0.148, 0.144, 0.136, 0.136, 0.128, 0.124, 0.124, 0.128, 0.124, 0.124), (0.356, 0.348, 0.332, 0.328, 0.308, 0.292, 0.288, 0.272, 0.252, 0.232, 0.216, 0.204, 0.16, 0.148, 0.152, 0.148, 0.132, 0.124, 0.124, 0.132, 0.144), (0.396, 0.384, 0.372, 0.36, 0.34, 0.316, 0.312, 0.312, 0.3, 0.272, 0.244, 0.236, 0.216, 0.192, 0.176, 0.168, 0.148, 0.148, 0.156, 0.156, 0.16), (0.452, 0.444, 0.428, 0.408, 0.388, 0.376, 0.364, 0.348, 0.336, 0.336, 0.3, 0.284, 0.264, 0.256, 0.24, 0.244, 0.212, 0.2, 0.22, 0.224, 0.224), (0.488, 0.476, 0.464, 0.444, 0.424, 0.4, 0.4, 0.384, 0.38, 0.372, 0.356, 0.324, 0.312, 0.312, 0.312, 0.312, 0.308, 0.292, 0.304, 0.332, 0.344), (0.492, 0.492, 0.48, 0.468, 0.452, 0.432, 0.424, 0.412, 0.404, 0.396, 0.396, 0.392, 0.376, 0.356, 0.356, 0.36, 0.368, 0.372, 0.392, 0.404, 0.42), (0.5, 0.5, 0.5, 0.484, 0.46, 0.452, 0.444, 0.436, 0.44, 0.44, 0.44, 0.452, 0.44, 0.436, 0.424, 0.42, 0.404, 0.44, 0.452, 0.468, 0.5), (0.484, 0.48, 0.46, 0.444, 0.44, 0.44, 0.44, 0.44, 0.444, 0.44, 0.456, 0.456, 0.46, 0.448, 0.448, 0.448, 0.436, 0.456, 0.468, 0.492, 0.492), (0.405737704918033, 0.401639344262295, 0.409836065573771, 0.418032786885246, 0.434426229508197, 0.438524590163934, 0.438524590163934, 0.44672131147541, 0.454918032786885, 0.471311475409836, 0.467213114754098, 0.479508196721311, 0.487704918032787, 0.487704918032787, 0.479508196721311, 0.483606557377049, 0.495901639344262, 0.516393442622951, 0.520491803278689, 0.532786885245902, 0.536885245901639), (0.320987654320988, 0.329218106995885, 0.349794238683128, 0.362139917695473, 0.374485596707819, 0.395061728395062, 0.42798353909465, 0.440329218106996, 0.465020576131687, 0.477366255144033, 0.48559670781893, 0.493827160493827, 0.506172839506173, 0.518518518518519, 0.51440329218107, 0.518518518518519, 0.547325102880658, 0.555555555555556, 0.555555555555556, 0.584362139917696, 0.580246913580247), (0.282700421940928, 0.29535864978903, 0.30379746835443, 0.320675105485232, 0.337552742616034, 0.354430379746835, 0.383966244725738, 0.434599156118144, 0.464135021097046, 0.485232067510549, 0.493670886075949, 0.514767932489452, 0.527426160337553, 0.535864978902954, 0.544303797468354, 0.561181434599156, 0.594936708860759, 0.59915611814346, 0.590717299578059, 0.60337552742616, 0.607594936708861), (0.230434782608696, 0.256521739130435, 0.273913043478261, 0.304347826086957, 0.334782608695652, 0.360869565217391, 0.373913043478261, 0.408695652173913, 0.469565217391304, 0.504347826086957, 0.521739130434783, 0.539130434782609, 0.552173913043478, 0.560869565217391, 0.578260869565217, 0.6, 0.617391304347826, 0.61304347826087, 0.61304347826087, 0.617391304347826, 0.643478260869565), (0.161137440758294, 0.175355450236967, 0.218009478672986, 0.28436018957346, 0.327014218009479, 0.341232227488152, 0.388625592417062, 0.436018957345972, 0.488151658767773, 0.516587677725119, 0.549763033175356, 0.573459715639811, 0.578199052132701, 0.592417061611374, 0.611374407582938, 0.649289099526066, 0.658767772511848, 0.658767772511848, 0.677725118483412, 0.66824644549763, 0.691943127962085), (0.224719101123596, 0.269662921348315, 0.303370786516854, 0.365168539325843, 0.382022471910112, 0.404494382022472, 0.443820224719101, 0.48876404494382, 0.5, 0.556179775280899, 0.567415730337079, 0.612359550561798, 0.612359550561798, 0.629213483146067, 0.634831460674157, 0.646067415730337, 0.662921348314607, 0.685393258426966, 0.707865168539326, 0.707865168539326, 0.724719101123596), (0.333333333333333, 0.363636363636364, 0.401515151515152, 0.431818181818182, 0.446969696969697, 0.46969696969697, 0.515151515151515, 0.53030303030303, 0.553030303030303, 0.583333333333333, 0.613636363636364, 0.621212121212121, 0.636363636363636, 0.643939393939394, 0.651515151515152, 0.651515151515152, 0.666666666666667, 0.666666666666667, 0.674242424242424, 0.681818181818182, 0.696969696969697), (0.373626373626374, 0.406593406593407, 0.483516483516484, 0.505494505494506, 0.527472527472528, 0.54945054945055, 0.571428571428571, 0.582417582417583, 0.593406593406593, 0.637362637362637, 0.659340659340659, 0.681318681318681, 0.692307692307692, 0.692307692307692, 0.703296703296703, 0.692307692307692, 0.703296703296703, 0.736263736263736, 0.736263736263736, 0.703296703296703, 0.67032967032967), (0.484375, 0.5625, 0.578125, 0.578125, 0.578125, 0.625, 0.625, 0.640625, 0.65625, 0.671875, 0.703125, 0.734375, 0.75, 0.734375, 0.734375, 0.75, 0.734375, 0.640625, 0.65625, 0.625, 0.609375), (0.617647058823529, 0.617647058823529, 0.617647058823529, 0.617647058823529, 0.617647058823529, 0.588235294117647, 0.588235294117647, 0.588235294117647, 0.617647058823529, 0.647058823529412, 0.676470588235294, 0.705882352941177, 0.676470588235294, 0.705882352941177, 0.705882352941177, 0.735294117647059, 0.705882352941177, 0.705882352941177, 0.735294117647059, 0.705882352941177, 0.647058823529412), (0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.6, 0.5, 0.5, 0.5, 0.5, 0.5, 0.4, 0.4, 0.4, 0.4, 0.3, 0.3, 0.3, 0.4, 0.4) ]); #Sample Z data volatility = np.array([(0.2964396, 0.28628612, 0.27630128, 0.26648508, 0.25683752, 0.2473586, 0.23804832, 0.22890668, 0.21993368, 0.21112932, 0.2024936, 0.19402652, 0.18572808, 0.17759828, 0.16963712, 0.1618446, 0.15422072, 0.14676548, 0.13947888, 0.13236092, 0.1254116), (0.2979793, 0.287974509333333, 0.278154444, 0.268519104, 0.259068489333333, 0.2498026, 0.240721436, 0.231824997333333, 0.223113284, 0.214586296, 0.206244033333333, 0.198086496, 0.190113684, 0.182325597333333, 0.174722236, 0.1673036, 0.160069689333333, 0.153020504, 0.146156044, 0.139476309333333, 0.1329813), (0.299519, 0.289662898666667, 0.280007608, 0.270553128, 0.261299458666667, 0.2522466, 0.243394552, 0.234743314666667, 0.226292888, 0.218043272, 0.209994466666667, 0.202146472, 0.194499288, 0.187052914666667, 0.179807352, 0.1727626, 0.165918658666667, 0.159275528, 0.152833208, 0.146591698666667, 0.140551), (0.3010587, 0.291351288, 0.281860772, 0.272587152, 0.263530428, 0.2546906, 0.246067668, 0.237661632, 0.229472492, 0.221500248, 0.2137449, 0.206206448, 0.198884892, 0.191780232, 0.184892468, 0.1782216, 0.171767628, 0.165530552, 0.159510372, 0.153707088, 0.1481207), (0.3025984, 0.293039677333333, 0.283713936, 0.274621176, 0.265761397333333, 0.2571346, 0.248740784, 0.240579949333333, 0.232652096, 0.224957224, 0.217495333333333, 0.210266424, 0.203270496, 0.196507549333333, 0.189977584, 0.1836806, 0.177616597333333, 0.171785576, 0.166187536, 0.160822477333333, 0.1556904), (0.3041381, 0.294728066666667, 0.2855671, 0.2766552, 0.267992366666667, 0.2595786, 0.2514139, 0.243498266666667, 0.2358317, 0.2284142, 0.221245766666667, 0.2143264, 0.2076561, 0.201234866666667, 0.1950627, 0.1891396, 0.183465566666667, 0.1780406, 0.1728647, 0.167937866666667, 0.1632601), (0.3056778, 0.296416456, 0.287420264, 0.278689224, 0.270223336, 0.2620226, 0.254087016, 0.246416584, 0.239011304, 0.231871176, 0.2249962, 0.218386376, 0.212041704, 0.205962184, 0.200147816, 0.1945986, 0.189314536, 0.184295624, 0.179541864, 0.175053256, 0.1708298), (0.3008828768, 0.292424567021333, 0.284187283338667, 0.276171025752, 0.268375794261333, 0.260801588866667, 0.253448409568, 0.246316256365333, 0.239405129258667, 0.232715028248, 0.226245953333333, 0.219997904514667, 0.213970881792, 0.208164885165333, 0.202579914634667, 0.1972159702, 0.192073051861333, 0.187151159618667, 0.182450293472, 0.177970453421333, 0.173711639466667), (0.2960879536, 0.288432678042667, 0.280954302677333, 0.273652827504, 0.266528252522667, 0.259580577733333, 0.252809803136, 0.246215928730667, 0.239798954517333, 0.233558880496, 0.227495706666667, 0.221609433029333, 0.215900059584, 0.210367586330667, 0.205012013269333, 0.1998333404, 0.194831567722667, 0.190006695237333, 0.185358722944, 0.180887650842667, 0.176593478933333), (0.2912930304, 0.284440789064, 0.277721322016, 0.271134629256, 0.264680710784, 0.2583595666, 0.252171196704, 0.246115601096, 0.240192779776, 0.234402732744, 0.22874546, 0.223220961544, 0.217829237376, 0.212570287496, 0.207444111904, 0.2024507106, 0.197590083584, 0.192862230856, 0.188267152416, 0.183804848264, 0.1794753184), (0.2864981072, 0.280448900085333, 0.274488341354667, 0.268616431008, 0.262833169045333, 0.257138555466667, 0.251532590272, 0.246015273461333, 0.240586605034667, 0.235246584992, 0.229995213333333, 0.224832490058667, 0.219758415168, 0.214772988661333, 0.209876210538667, 0.2050680808, 0.200348599445333, 0.195717766474667, 0.191175581888, 0.186722045685333, 0.182357157866667), (0.281703184, 0.276457011106667, 0.271255360693333, 0.26609823276, 0.260985627306667, 0.255917544333333, 0.25089398384, 0.245914945826667, 0.240980430293333, 0.23609043724, 0.231244966666667, 0.226444018573333, 0.22168759296, 0.216975689826667, 0.212308309173333, 0.207685451, 0.203107115306667, 0.198573302093333, 0.19408401136, 0.189639243106667, 0.185238997333333), (0.2769082608, 0.272465122128, 0.268022380032, 0.263580034512, 0.259138085568, 0.2546965332, 0.250255377408, 0.245814618192, 0.241374255552, 0.236934289488, 0.23249472, 0.228055547088, 0.223616770752, 0.219178390992, 0.214740407808, 0.2103028212, 0.205865631168, 0.201428837712, 0.196992440832, 0.192556440528, 0.1881208368), (0.279132175333333, 0.27446485122, 0.26979833968, 0.265132640713333, 0.26046775432, 0.2558036805, 0.251140419253333, 0.24647797058, 0.24181633448, 0.237155510953333, 0.2324955, 0.22783630162, 0.223177915813333, 0.21852034258, 0.21386358192, 0.209207633833333, 0.20455249832, 0.19989817538, 0.195244665013333, 0.19059196722, 0.185940082), (0.281356089866667, 0.276464580312, 0.271574299328, 0.266685246914667, 0.261797423072, 0.2569108278, 0.252025461098667, 0.247141322968, 0.242258413408, 0.237376732418667, 0.23249628, 0.227617056152, 0.222739060874667, 0.217862294168, 0.212986756032, 0.208112446466667, 0.203239365472, 0.198367513048, 0.193496889194667, 0.188627493912, 0.1837593272), (0.2835800044, 0.278464309404, 0.273350258976, 0.268237853116, 0.263127091824, 0.2580179751, 0.252910502944, 0.247804675356, 0.242700492336, 0.237597953884, 0.23249706, 0.227397810684, 0.222300205936, 0.217204245756, 0.212109930144, 0.2070172591, 0.201926232624, 0.196836850716, 0.191749113376, 0.186663020604, 0.1815785724), (0.285803918933333, 0.280464038496, 0.275126218624, 0.269790459317333, 0.264456760576, 0.2591251224, 0.253795544789333, 0.248468027744, 0.243142571264, 0.237819175349333, 0.23249784, 0.227178565216, 0.221861350997333, 0.216546197344, 0.211233104256, 0.205922071733333, 0.200613099776, 0.195306188384, 0.190001337557333, 0.184698547296, 0.1793978176), (0.288027833466667, 0.282463767588, 0.276902178272, 0.271343065518667, 0.265786429328, 0.2602322697, 0.254680586634667, 0.249131380132, 0.243584650192, 0.238040396814667, 0.23249862, 0.226959319748, 0.221422496058667, 0.215888148932, 0.210356278368, 0.204826884366667, 0.199299966928, 0.193775526052, 0.188253561738667, 0.182734073988, 0.1772170628), (0.290251748, 0.28446349668, 0.27867813792, 0.27289567172, 0.26711609808, 0.261339417, 0.25556562848, 0.24979473252, 0.24402672912, 0.23826161828, 0.2324994, 0.22674007428, 0.22098364112, 0.21523010052, 0.20947945248, 0.203731697, 0.19798683408, 0.19224486372, 0.18650578592, 0.18076960068, 0.175036308) ]); #Create X and Y data x = np.arange(80, 121, 2) y = np.arange(3, 12.01, 0.5) X, Y = np.meshgrid(x, y) #Create a color map that goes from blue to white to red cdict = {'red': ((0, 0, 0), #ie at value 0, red component is 0. First parameter is the value, second is the color component. Ignore the third parameter, it is for discontinuities. (0.5, 1, 1), # at value 0.5, red component is 1. (1, 1, 1)), # at value 1, red component is 1 'green': ((0, 0, 0), (0.5, 1, 1), (1, 0, 0)), 'blue': ((0, 1, 1), (0.5, 1, 1), (1, 0, 0))} #Make the color map and register it cmap1 = matplotlib.colors.LinearSegmentedColormap('UWR',cdict,256) cm.register_cmap(name='UWR', cmap=cmap1) UWR = cm.get_cmap('UWR') #Create a variable for the colorbar m = cm.ScalarMappable(cmap=UWR) m.set_array(heatmap) #Create the surface, multiply vol by 100 so axis label can be in units of %. surf = ax.plot_surface(X, Y, volatility*100, rstride=1, cstride=1, facecolors=UWR(heatmap), linewidth=1, shade=False, edgecolors='#000000', antialiased=True) #Axis limits ax.set_xlim3d(80, 120) ax.set_ylim3d(0, 12) #Tick locations. 7 ticks for Y axis, 5 ticks for X. For Z axis maximum 6 ticks, only allow integers and only in steps of either 2, 5 or 10. ax.yaxis.set_major_locator(LinearLocator(7)) ax.xaxis.set_major_locator(LinearLocator(5)) ax.zaxis.set_major_locator(MaxNLocator(6, interger = True, steps=[2, 5, 10])) #Format X and Z axis tick labels as percentages and as integers ax.xaxis.set_major_formatter(FormatStrFormatter('%d%%')) ax.zaxis.set_major_formatter(FormatStrFormatter('%d%%')) #Create a color bar with 11 ticks cbar = plt.colorbar(m, ticks=LinearLocator(11), shrink=0.85) #Make the tick label go from 0 to 1 in steps of 0.1 cbar.ax.set_yticklabels(arange(0,1.01,0.1)) ax.xaxis.set_label_text("Moneyness (Strike / Future)") ax.yaxis.set_label_text("Term (Months)") ax.zaxis.set_label_text("Implied Volatility") cbar.ax.yaxis.set_label_text("Percentile of current volatility compared with historical levels") #Set view angle ax.view_init(20, -40) #Show the plot plt.show() 

Puede colocar las líneas en el gráfico de superficie agregando el argumento de palabra clave edgecolors

 # Add black lines in the edges surf = ax.plot_surface(X, Y, volatility, rstride=1, cstride=1, facecolors= UWR(heatmap), linewidth=1, shade=False, edgecolors='#000000') 

Instrucciones sobre cómo dar formato a las tags y ubicaciones de las marcas de eje aquí: http://matplotlib.sourceforge.net/api/ticker_api.html#matplotlib.ticker.FormatStrFormatter


Resuelto – Subido de comentarios:

Agregar surf.set_edgecolor('k') después de plot_surface reemplaza el color del borde. Creo que eso puede estar relacionado con el hecho de que facecolors es una opción de plot_surface, pero los edgecolors son una opción de Poly3DCollection. Más detalles aquí .