# pgfplots: Color a 3D surf plot based on y-value

I'm not sure if things have changed since version 1.7, but this is the closest thing I could find. I'm wondering if there's an easier way to use the y-value with a colormap to determine the color, or even some arbitrary scalar-valued function with a color map. In the link, you have to basically define the RGB dependence on x,y,z values and I don't see how to use a pre-defined colormap.

The color is determined by the meta value for each coordinate. By default, in 3D plots this is the z value of the coordinate. You can tell PGFPlots to use the y value instead by setting point meta=y. You can also use more complex expressions, like point meta=sqrt(x^2+y^2).

Here's an example that uses a custom colormap with the values for the parula colormap:

\documentclass{article}
\usepackage{pgfplots}
\begin{document}

\pgfplotsset{
colormap={parula}{
rgb=(0.2081,0.1663,0.5292)
rgb=(0.2116,0.1898,0.5777)
rgb=(0.2123,0.2138,0.627)
rgb=(0.2081,0.2386,0.6771)
rgb=(0.1959,0.2645,0.7279)
rgb=(0.1707,0.2919,0.7792)
rgb=(0.1253,0.3242,0.8303)
rgb=(0.0591,0.3598,0.8683)
rgb=(0.0117,0.3875,0.882)
rgb=(0.006,0.4086,0.8828)
rgb=(0.0165,0.4266,0.8786)
rgb=(0.0329,0.443,0.872)
rgb=(0.0498,0.4586,0.8641)
rgb=(0.0629,0.4737,0.8554)
rgb=(0.0723,0.4887,0.8467)
rgb=(0.0779,0.504,0.8384)
rgb=(0.0793,0.52,0.8312)
rgb=(0.0749,0.5375,0.8263)
rgb=(0.0641,0.557,0.824)
rgb=(0.0488,0.5772,0.8228)
rgb=(0.0343,0.5966,0.8199)
rgb=(0.0265,0.6137,0.8135)
rgb=(0.0239,0.6287,0.8038)
rgb=(0.0231,0.6418,0.7913)
rgb=(0.0228,0.6535,0.7768)
rgb=(0.0267,0.6642,0.7607)
rgb=(0.0384,0.6743,0.7436)
rgb=(0.059,0.6838,0.7254)
rgb=(0.0843,0.6928,0.7062)
rgb=(0.1133,0.7015,0.6859)
rgb=(0.1453,0.7098,0.6646)
rgb=(0.1801,0.7177,0.6424)
rgb=(0.2178,0.725,0.6193)
rgb=(0.2586,0.7317,0.5954)
rgb=(0.3022,0.7376,0.5712)
rgb=(0.3482,0.7424,0.5473)
rgb=(0.3953,0.7459,0.5244)
rgb=(0.442,0.7481,0.5033)
rgb=(0.4871,0.7491,0.484)
rgb=(0.53,0.7491,0.4661)
rgb=(0.5709,0.7485,0.4494)
rgb=(0.6099,0.7473,0.4337)
rgb=(0.6473,0.7456,0.4188)
rgb=(0.6834,0.7435,0.4044)
rgb=(0.7184,0.7411,0.3905)
rgb=(0.7525,0.7384,0.3768)
rgb=(0.7858,0.7356,0.3633)
rgb=(0.8185,0.7327,0.3498)
rgb=(0.8507,0.7299,0.336)
rgb=(0.8824,0.7274,0.3217)
rgb=(0.9139,0.7258,0.3063)
rgb=(0.945,0.7261,0.2886)
rgb=(0.9739,0.7314,0.2666)
rgb=(0.9938,0.7455,0.2403)
rgb=(0.999,0.7653,0.2164)
rgb=(0.9955,0.7861,0.1967)
rgb=(0.988,0.8066,0.1794)
rgb=(0.9789,0.8271,0.1633)
rgb=(0.9697,0.8481,0.1475)
rgb=(0.9626,0.8705,0.1309)
rgb=(0.9589,0.8949,0.1132)
rgb=(0.9598,0.9218,0.0948)
rgb=(0.9661,0.9514,0.0755)
rgb=(0.9763,0.9831,0.0538)
}
}

\begin{tikzpicture}
\begin{axis}[domain=0:pi]
\addplot3 [surf, point meta=y] {cos(deg(x)) * sin(deg(y))};
\end{axis}
\end{tikzpicture}
\end{document}

• Thanks, that worked perfectly. Also, damn that is an attractive colormap. =P – Hanmyo Feb 15 '15 at 21:00
• You missed the last one rgb=(0.9763,0.9831,0.0538). – Manuel Mar 12 '15 at 13:15
• @Manuel: Oops, you're right. Fixed, thanks! – Jake Mar 12 '15 at 13:16

Today I've watched this great video from SciPy 2015 and it resonated so well with me (recovering matlab user, developing python stuff, also being colorblind) I wanted to do some publicity about it.

It is about a new colormap viridis that is among other things, colorblind friendly and sequentially proper and free.

Here is the video link. Also here is an example of the rendering (takes a while to compile):

\documentclass[border=5mm]{standalone}
\usepackage{pgfplots}

\pgfplotsset{compat=1.12,
colormap/viridis/.style={
colormap={viridis}{
rgb=(0.26700401,  0.00487433,  0.32941519)
rgb=(0.26851048,  0.00960483,  0.33542652)
rgb=(0.26994384,  0.01462494,  0.34137895)
rgb=(0.27130489,  0.01994186,  0.34726862)
rgb=(0.27259384,  0.02556309,  0.35309303)
rgb=(0.27380934,  0.03149748,  0.35885256)
rgb=(0.27495242,  0.03775181,  0.36454323)
rgb=(0.27602238,  0.04416723,  0.37016418)
rgb=(0.2770184 ,  0.05034437,  0.37571452)
rgb=(0.27794143,  0.05632444,  0.38119074)
rgb=(0.27879067,  0.06214536,  0.38659204)
rgb=(0.2795655 ,  0.06783587,  0.39191723)
rgb=(0.28026658,  0.07341724,  0.39716349)
rgb=(0.28089358,  0.07890703,  0.40232944)
rgb=(0.28144581,  0.0843197 ,  0.40741404)
rgb=(0.28192358,  0.08966622,  0.41241521)
rgb=(0.28232739,  0.09495545,  0.41733086)
rgb=(0.28265633,  0.10019576,  0.42216032)
rgb=(0.28291049,  0.10539345,  0.42690202)
rgb=(0.28309095,  0.11055307,  0.43155375)
rgb=(0.28319704,  0.11567966,  0.43611482)
rgb=(0.28322882,  0.12077701,  0.44058404)
rgb=(0.28318684,  0.12584799,  0.44496   )
rgb=(0.283072  ,  0.13089477,  0.44924127)
rgb=(0.28288389,  0.13592005,  0.45342734)
rgb=(0.28262297,  0.14092556,  0.45751726)
rgb=(0.28229037,  0.14591233,  0.46150995)
rgb=(0.28188676,  0.15088147,  0.46540474)
rgb=(0.28141228,  0.15583425,  0.46920128)
rgb=(0.28086773,  0.16077132,  0.47289909)
rgb=(0.28025468,  0.16569272,  0.47649762)
rgb=(0.27957399,  0.17059884,  0.47999675)
rgb=(0.27882618,  0.1754902 ,  0.48339654)
rgb=(0.27801236,  0.18036684,  0.48669702)
rgb=(0.27713437,  0.18522836,  0.48989831)
rgb=(0.27619376,  0.19007447,  0.49300074)
rgb=(0.27519116,  0.1949054 ,  0.49600488)
rgb=(0.27412802,  0.19972086,  0.49891131)
rgb=(0.27300596,  0.20452049,  0.50172076)
rgb=(0.27182812,  0.20930306,  0.50443413)
rgb=(0.27059473,  0.21406899,  0.50705243)
rgb=(0.26930756,  0.21881782,  0.50957678)
rgb=(0.26796846,  0.22354911,  0.5120084 )
rgb=(0.26657984,  0.2282621 ,  0.5143487 )
rgb=(0.2651445 ,  0.23295593,  0.5165993 )
rgb=(0.2636632 ,  0.23763078,  0.51876163)
rgb=(0.26213801,  0.24228619,  0.52083736)
rgb=(0.26057103,  0.2469217 ,  0.52282822)
rgb=(0.25896451,  0.25153685,  0.52473609)
rgb=(0.25732244,  0.2561304 ,  0.52656332)
rgb=(0.25564519,  0.26070284,  0.52831152)
rgb=(0.25393498,  0.26525384,  0.52998273)
rgb=(0.25219404,  0.26978306,  0.53157905)
rgb=(0.25042462,  0.27429024,  0.53310261)
rgb=(0.24862899,  0.27877509,  0.53455561)
rgb=(0.2468114 ,  0.28323662,  0.53594093)
rgb=(0.24497208,  0.28767547,  0.53726018)
rgb=(0.24311324,  0.29209154,  0.53851561)
rgb=(0.24123708,  0.29648471,  0.53970946)
rgb=(0.23934575,  0.30085494,  0.54084398)
rgb=(0.23744138,  0.30520222,  0.5419214 )
rgb=(0.23552606,  0.30952657,  0.54294396)
rgb=(0.23360277,  0.31382773,  0.54391424)
rgb=(0.2316735 ,  0.3181058 ,  0.54483444)
rgb=(0.22973926,  0.32236127,  0.54570633)
rgb=(0.22780192,  0.32659432,  0.546532  )
rgb=(0.2258633 ,  0.33080515,  0.54731353)
rgb=(0.22392515,  0.334994  ,  0.54805291)
rgb=(0.22198915,  0.33916114,  0.54875211)
rgb=(0.22005691,  0.34330688,  0.54941304)
rgb=(0.21812995,  0.34743154,  0.55003755)
rgb=(0.21620971,  0.35153548,  0.55062743)
rgb=(0.21429757,  0.35561907,  0.5511844 )
rgb=(0.21239477,  0.35968273,  0.55171011)
rgb=(0.2105031 ,  0.36372671,  0.55220646)
rgb=(0.20862342,  0.36775151,  0.55267486)
rgb=(0.20675628,  0.37175775,  0.55311653)
rgb=(0.20490257,  0.37574589,  0.55353282)
rgb=(0.20306309,  0.37971644,  0.55392505)
rgb=(0.20123854,  0.38366989,  0.55429441)
rgb=(0.1994295 ,  0.38760678,  0.55464205)
rgb=(0.1976365 ,  0.39152762,  0.55496905)
rgb=(0.19585993,  0.39543297,  0.55527637)
rgb=(0.19410009,  0.39932336,  0.55556494)
rgb=(0.19235719,  0.40319934,  0.55583559)
rgb=(0.19063135,  0.40706148,  0.55608907)
rgb=(0.18892259,  0.41091033,  0.55632606)
rgb=(0.18723083,  0.41474645,  0.55654717)
rgb=(0.18555593,  0.4185704 ,  0.55675292)
rgb=(0.18389763,  0.42238275,  0.55694377)
rgb=(0.18225561,  0.42618405,  0.5571201 )
rgb=(0.18062949,  0.42997486,  0.55728221)
rgb=(0.17901879,  0.43375572,  0.55743035)
rgb=(0.17742298,  0.4375272 ,  0.55756466)
rgb=(0.17584148,  0.44128981,  0.55768526)
rgb=(0.17427363,  0.4450441 ,  0.55779216)
rgb=(0.17271876,  0.4487906 ,  0.55788532)
rgb=(0.17117615,  0.4525298 ,  0.55796464)
rgb=(0.16964573,  0.45626209,  0.55803034)
rgb=(0.16812641,  0.45998802,  0.55808199)
rgb=(0.1666171 ,  0.46370813,  0.55811913)
rgb=(0.16511703,  0.4674229 ,  0.55814141)
rgb=(0.16362543,  0.47113278,  0.55814842)
rgb=(0.16214155,  0.47483821,  0.55813967)
rgb=(0.16066467,  0.47853961,  0.55811466)
rgb=(0.15919413,  0.4822374 ,  0.5580728 )
rgb=(0.15772933,  0.48593197,  0.55801347)
rgb=(0.15626973,  0.4896237 ,  0.557936  )
rgb=(0.15481488,  0.49331293,  0.55783967)
rgb=(0.15336445,  0.49700003,  0.55772371)
rgb=(0.1519182 ,  0.50068529,  0.55758733)
rgb=(0.15047605,  0.50436904,  0.55742968)
rgb=(0.14903918,  0.50805136,  0.5572505 )
rgb=(0.14760731,  0.51173263,  0.55704861)
rgb=(0.14618026,  0.51541316,  0.55682271)
rgb=(0.14475863,  0.51909319,  0.55657181)
rgb=(0.14334327,  0.52277292,  0.55629491)
rgb=(0.14193527,  0.52645254,  0.55599097)
rgb=(0.14053599,  0.53013219,  0.55565893)
rgb=(0.13914708,  0.53381201,  0.55529773)
rgb=(0.13777048,  0.53749213,  0.55490625)
rgb=(0.1364085 ,  0.54117264,  0.55448339)
rgb=(0.13506561,  0.54485335,  0.55402906)
rgb=(0.13374299,  0.54853458,  0.55354108)
rgb=(0.13244401,  0.55221637,  0.55301828)
rgb=(0.13117249,  0.55589872,  0.55245948)
rgb=(0.1299327 ,  0.55958162,  0.55186354)
rgb=(0.12872938,  0.56326503,  0.55122927)
rgb=(0.12756771,  0.56694891,  0.55055551)
rgb=(0.12645338,  0.57063316,  0.5498411 )
rgb=(0.12539383,  0.57431754,  0.54908564)
rgb=(0.12439474,  0.57800205,  0.5482874 )
rgb=(0.12346281,  0.58168661,  0.54744498)
rgb=(0.12260562,  0.58537105,  0.54655722)
rgb=(0.12183122,  0.58905521,  0.54562298)
rgb=(0.12114807,  0.59273889,  0.54464114)
rgb=(0.12056501,  0.59642187,  0.54361058)
rgb=(0.12009154,  0.60010387,  0.54253043)
rgb=(0.11973756,  0.60378459,  0.54139999)
rgb=(0.11951163,  0.60746388,  0.54021751)
rgb=(0.11942341,  0.61114146,  0.53898192)
rgb=(0.11948255,  0.61481702,  0.53769219)
rgb=(0.11969858,  0.61849025,  0.53634733)
rgb=(0.12008079,  0.62216081,  0.53494633)
rgb=(0.12063824,  0.62582833,  0.53348834)
rgb=(0.12137972,  0.62949242,  0.53197275)
rgb=(0.12231244,  0.63315277,  0.53039808)
rgb=(0.12344358,  0.63680899,  0.52876343)
rgb=(0.12477953,  0.64046069,  0.52706792)
rgb=(0.12632581,  0.64410744,  0.52531069)
rgb=(0.12808703,  0.64774881,  0.52349092)
rgb=(0.13006688,  0.65138436,  0.52160791)
rgb=(0.13226797,  0.65501363,  0.51966086)
rgb=(0.13469183,  0.65863619,  0.5176488 )
rgb=(0.13733921,  0.66225157,  0.51557101)
rgb=(0.14020991,  0.66585927,  0.5134268 )
rgb=(0.14330291,  0.66945881,  0.51121549)
rgb=(0.1466164 ,  0.67304968,  0.50893644)
rgb=(0.15014782,  0.67663139,  0.5065889 )
rgb=(0.15389405,  0.68020343,  0.50417217)
rgb=(0.15785146,  0.68376525,  0.50168574)
rgb=(0.16201598,  0.68731632,  0.49912906)
rgb=(0.1663832 ,  0.69085611,  0.49650163)
rgb=(0.1709484 ,  0.69438405,  0.49380294)
rgb=(0.17570671,  0.6978996 ,  0.49103252)
rgb=(0.18065314,  0.70140222,  0.48818938)
rgb=(0.18578266,  0.70489133,  0.48527326)
rgb=(0.19109018,  0.70836635,  0.48228395)
rgb=(0.19657063,  0.71182668,  0.47922108)
rgb=(0.20221902,  0.71527175,  0.47608431)
rgb=(0.20803045,  0.71870095,  0.4728733 )
rgb=(0.21400015,  0.72211371,  0.46958774)
rgb=(0.22012381,  0.72550945,  0.46622638)
rgb=(0.2263969 ,  0.72888753,  0.46278934)
rgb=(0.23281498,  0.73224735,  0.45927675)
rgb=(0.2393739 ,  0.73558828,  0.45568838)
rgb=(0.24606968,  0.73890972,  0.45202405)
rgb=(0.25289851,  0.74221104,  0.44828355)
rgb=(0.25985676,  0.74549162,  0.44446673)
rgb=(0.26694127,  0.74875084,  0.44057284)
rgb=(0.27414922,  0.75198807,  0.4366009 )
rgb=(0.28147681,  0.75520266,  0.43255207)
rgb=(0.28892102,  0.75839399,  0.42842626)
rgb=(0.29647899,  0.76156142,  0.42422341)
rgb=(0.30414796,  0.76470433,  0.41994346)
rgb=(0.31192534,  0.76782207,  0.41558638)
rgb=(0.3198086 ,  0.77091403,  0.41115215)
rgb=(0.3277958 ,  0.77397953,  0.40664011)
rgb=(0.33588539,  0.7770179 ,  0.40204917)
rgb=(0.34407411,  0.78002855,  0.39738103)
rgb=(0.35235985,  0.78301086,  0.39263579)
rgb=(0.36074053,  0.78596419,  0.38781353)
rgb=(0.3692142 ,  0.78888793,  0.38291438)
rgb=(0.37777892,  0.79178146,  0.3779385 )
rgb=(0.38643282,  0.79464415,  0.37288606)
rgb=(0.39517408,  0.79747541,  0.36775726)
rgb=(0.40400101,  0.80027461,  0.36255223)
rgb=(0.4129135 ,  0.80304099,  0.35726893)
rgb=(0.42190813,  0.80577412,  0.35191009)
rgb=(0.43098317,  0.80847343,  0.34647607)
rgb=(0.44013691,  0.81113836,  0.3409673 )
rgb=(0.44936763,  0.81376835,  0.33538426)
rgb=(0.45867362,  0.81636288,  0.32972749)
rgb=(0.46805314,  0.81892143,  0.32399761)
rgb=(0.47750446,  0.82144351,  0.31819529)
rgb=(0.4870258 ,  0.82392862,  0.31232133)
rgb=(0.49661536,  0.82637633,  0.30637661)
rgb=(0.5062713 ,  0.82878621,  0.30036211)
rgb=(0.51599182,  0.83115784,  0.29427888)
rgb=(0.52577622,  0.83349064,  0.2881265 )
rgb=(0.5356211 ,  0.83578452,  0.28190832)
rgb=(0.5455244 ,  0.83803918,  0.27562602)
rgb=(0.55548397,  0.84025437,  0.26928147)
rgb=(0.5654976 ,  0.8424299 ,  0.26287683)
rgb=(0.57556297,  0.84456561,  0.25641457)
rgb=(0.58567772,  0.84666139,  0.24989748)
rgb=(0.59583934,  0.84871722,  0.24332878)
rgb=(0.60604528,  0.8507331 ,  0.23671214)
rgb=(0.61629283,  0.85270912,  0.23005179)
rgb=(0.62657923,  0.85464543,  0.22335258)
rgb=(0.63690157,  0.85654226,  0.21662012)
rgb=(0.64725685,  0.85839991,  0.20986086)
rgb=(0.65764197,  0.86021878,  0.20308229)
rgb=(0.66805369,  0.86199932,  0.19629307)
rgb=(0.67848868,  0.86374211,  0.18950326)
rgb=(0.68894351,  0.86544779,  0.18272455)
rgb=(0.69941463,  0.86711711,  0.17597055)
rgb=(0.70989842,  0.86875092,  0.16925712)
rgb=(0.72039115,  0.87035015,  0.16260273)
rgb=(0.73088902,  0.87191584,  0.15602894)
rgb=(0.74138803,  0.87344918,  0.14956101)
rgb=(0.75188414,  0.87495143,  0.14322828)
rgb=(0.76237342,  0.87642392,  0.13706449)
rgb=(0.77285183,  0.87786808,  0.13110864)
rgb=(0.78331535,  0.87928545,  0.12540538)
rgb=(0.79375994,  0.88067763,  0.12000532)
rgb=(0.80418159,  0.88204632,  0.11496505)
rgb=(0.81457634,  0.88339329,  0.11034678)
rgb=(0.82494028,  0.88472036,  0.10621724)
rgb=(0.83526959,  0.88602943,  0.1026459 )
rgb=(0.84556056,  0.88732243,  0.09970219)
rgb=(0.8558096 ,  0.88860134,  0.09745186)
rgb=(0.86601325,  0.88986815,  0.09595277)
rgb=(0.87616824,  0.89112487,  0.09525046)
rgb=(0.88627146,  0.89237353,  0.09537439)
rgb=(0.89632002,  0.89361614,  0.09633538)
rgb=(0.90631121,  0.89485467,  0.09812496)
rgb=(0.91624212,  0.89609127,  0.1007168 )
rgb=(0.92610579,  0.89732977,  0.10407067)
rgb=(0.93590444,  0.8985704 ,  0.10813094)
rgb=(0.94563626,  0.899815  ,  0.11283773)
rgb=(0.95529972,  0.90106534,  0.11812832)
rgb=(0.96489353,  0.90232311,  0.12394051)
rgb=(0.97441665,  0.90358991,  0.13021494)
rgb=(0.98386829,  0.90486726,  0.13689671)
rgb=(0.99324789,  0.90615657,  0.1439362 )
}
}
}
\begin{document}
\begin{tikzpicture}
\begin{axis}[domain=0:pi,samples=81,samples y=81,colormap/viridis,view={20}{55},hide axis]
\addplot3 [surf, point meta=y] {exp(-0.5*x*y)*4*cos(deg(5*x)) * sin(deg(12*y)) + 10*cos(deg(0.5*x*y)};
\end{axis}
\end{tikzpicture}
\end{document}


• @ChristianFeuersänger I was considering sending you a mail about this. The copyright about the parula is that it is Mathworks' IP and they didn't let matplotlib developers use parula. Thus they rolled up the sleeves and created the viridis as a complete open-source alternative. If you have the chance to watch the video there are more details about it. But TL;DR parula is copyrighted, viridis is open-source and it would be great to have it on pgfplots default. – percusse Aug 8 '15 at 9:59
• Thanks for the details! I will add viridis to pgfplots (not as default though: I want to avoid incompatible changes, even with the compat method) – Christian Feuersänger Aug 8 '15 at 10:03
• I added a license statement to the colormap repository, releasing viridis under CC0 (public domain): github.com/BIDS/colormap/blob/master/colormaps.py – Stefan van der Walt Sep 4 '15 at 19:55
• @StefanvanderWalt Ha! Welcome to the site. I'll notify Christian. Thanks a lot for the tools and effort by the way. – percusse Sep 5 '15 at 6:58
• @ChristianFeuersänger Would it be possible to include also the other colormaps given in Stefan van der Walt's link in pgfplots? I like the others more, as e.g. inferno provides a greater range in brightness. (I did create my own header file with the definitions, but it would be more convenient to have the definitions already included in pgfplots) – Faekynn May 18 '16 at 15:33