HydroperoxyCyclophosphamideDoses={0,0.32`,0.5`,0.79`,1.2`,2,3.2`,5.07`,8,12.67`,20};

VincristineDoses={0,0.00032`,0.000507`,0.0008`,0.00127`,0.002`,0.0032`,0.00507`,0.008`,0.01253`,0.02`};

CycloVincResponseGrid={{0.`,-0.28`,-0.13`,-0.09`,-0.01`,-0.19`,-0.35`,-0.5`,-1.42`,-3,-3},{0.01`,0.`,0.05`,-0.1`,-0.18`,-0.13`,-0.52`,-0.56`,-1.`,-3,-3},{-0.05`,-0.14`,0.03`,-0.21`,0.05`,-0.05`,-0.32`,-0.5`,-0.77`,-3,-3},{-0.21`,0.02`,0.05`,-0.09`,-0.1`,-0.18`,-0.32`,-0.53`,-0.62`,-3,-3},{-0.11`,-0.29`,-0.16`,-0.2`,-0.45`,-0.31`,-0.51`,-0.68`,-1.22`,-3,-3},{-0.55`,-0.4`,-0.48`,-0.38`,-0.42`,-0.41`,-0.43`,-0.57`,-1.12`,-3,-3},{-0.98`,-0.98`,-0.84`,-0.71`,-0.65`,-0.74`,-0.70`,-0.69`,-1.01`,-3,-3},{-1.73`,-1.53`,-1.53`,-1.29`,-1.25`,-0.97`,-0.78`,-0.78`,-1.11`,-3,-3},{-1.75`,-1.68`,-1.6`,-1.79`,-1.7`,-1.17`,-1.13`,-0.87`,-1.40`,-3,-3},{-1.77`,-1.75`,-1.81`,-1.79`,-1.75`,-1.43`,-1.13`,-0.95`,-1.21`,-3,-3},{-1.89`,-1.83`,-1.79`,-1.71`,-1.68`,-1.43`,-1.31`,-1.28`,-1.51`,-3,-3}};

The plot below shows the drug response over the 2-dimensional drug-drug space.
(there is no need to understand the code that produces this plot; it simply illustrates the input data)

ArrayPlot[CycloVincResponseGrid,
ColorFunctionScaling->False,
ColorFunction->(ColorData["BlueGreenYellow"][1.1+#/1.7]&),
FrameLabel->{"Vincristine (nM)","4-Hydroperoxy-Cyclophosphamide (μM)"},
FrameTicks->{{Range[11],1000*VincristineDoses}\[Transpose],{Range[11],Map[Rotate[#,π/2]&,HydroperoxyCyclophosphamideDoses]}\[Transpose]},
PlotRangePadding->None,
BaseStyle->{FontFamily->"Arial",FontSize->12},
FrameStyle->Directive[Black,Thickness[Medium]]]

logframeticks=Join[Table[{x,ToString[100*(10^x)]<>"%",{0,0.4}},{x,-10,10}],Flatten[Table[Table[{Log[10,x],"",{0,0.15}},{x,1*(10^y),9*(10^y),1*(10^y)}],{y,-5,5,1}],1]];

ContourPlot[y,{x,0,1},{y,-2.,0},Contours->(Range[21]-21)/10,ContourStyle->None,PlotRangePadding->None,ColorFunctionScaling->None,ColorFunction->(ColorData["BlueGreenYellow"][1.1+#/1.7]&),FrameTicks->{{logframeticks,{{Log[10,0.25],"Growth arrest",{0,0.25},AbsoluteThickness[2]},{Log[10,0.25*0.2],"+80% killing",{0,0.25},AbsoluteThickness[2]},{Log[10,0.25*0.5],"+50% killing",{0,0.25},AbsoluteThickness[2]}}},{None,None}},AspectRatio->8,BaseStyle->{FontFamily->"Arial",FontSize->12},FrameStyle->Directive[Black,Thickness[Medium]],ImageSize->{{200},{200}},FrameLabel->{,"Relative viability\n(CellTiter Glo)"}]

Converting the grid to a list of 3D coordinates

ListOfPoints=Flatten[Table[{HydroperoxyCyclophosphamideDoses[[i]],VincristineDoses[[j]],CycloVincResponseGrid[[j,i]]},{i,1,Length[HydroperoxyCyclophosphamideDoses]},{j,1,Length[VincristineDoses]}],1];

ListOfPoints[[1;;30]]//TableForm

Illustrating the 3D  coordinates.
There is no need to do this, nor to understand this code. It simply illustrates what you have with a list of 3D coordinates.

MyPointsPlot=ListPointPlot3D[ListOfPoints,ViewPoint->{20,30,40},PlotRange->{{0,20*1.01},{0,0.02*1.01},{-3*1.01,0}},PlotRangePadding->None,PlotStyle->Directive[Red,AbsolutePointSize[5]],Filling->Bottom,BoxRatios->{1,1,0.6},AxesLabel->{"4-Hydroperoxy-Cyclophosphamide (μM)","Vincristine (μM)","(Subscript[Log, 10])(Viability)"},ImageSize->500]

Creating an interpolation function from the list of 3D coordinates.
Note the option to specify first-order interpolation (“InterpolationOrder -> 1”)

MyInterpolationFunction=Interpolation[ListOfPoints,InterpolationOrder->1]

Illustrating the Interpolation function.
There is no need to do this, nor to understand this code. It simply illustrates what the interpolation function is.

SurfacePlot=Plot3D[MyInterpolationFunction[c,v],{c,0,20},{v,0,0.02},ColorFunctionScaling->False,ColorFunction->(Directive[Opacity[0.8],ColorData["BlueGreenYellow"][1.1+#3/1.7]]&),ViewPoint->{20,30,40},PlotRange->{{0,20*1.01},{0,0.02*1.01},{-3*1.01,0}},PlotRangePadding->None,PlotPoints->100,Mesh->{HydroperoxyCyclophosphamideDoses,VincristineDoses},MeshStyle->Directive[Black,AbsoluteThickness[0.5],Opacity[1]],BoxRatios->{1,1,0.6},AxesLabel->{"4-Hydroperoxy-Cyclophosphamide (μM)","Vincristine (μM)","(Subscript[Log, 10])(Viability)"},ImageSize->500]

As above with the measured data points on the surface:

Show[
ListPointPlot3D[ListOfPoints,ViewPoint->{20,30,40},PlotRange->{{0,20*1.01},{0,0.02*1.01},{-3*1.01,0}},PlotRangePadding->None,PlotStyle->Directive[Red,AbsolutePointSize[5]],Filling->None,BoxRatios->{1,1,0.6},AxesLabel->{"4-Hydroperoxy-Cyclophosphamide (μM)","Vincristine (μM)","(Subscript[Log, 10])(Viability)"},ImageSize->500]
,
SurfacePlot
]

Here I am specifying which thresholds of drug response we want to inspect in the isobologram analysis.
This is achieved by drawing solid lines at particular contours in a “Contour Plot”.

In this example I have chosen three thresholds:
i) growth arrest
ii) 50% cell killing
iii) 80% cell killing

In this particular experiment, untreated cells increase in number by a factor of ≃4 during the course of the assay.
Therefore, 25% cell count relative to untreated control represents growth arrest, or enough cell killing to balance growth.
12.5% relative cell count indicates at least 50% cell killing in addition to growth arrest.
5% relative cell count indicates at least 80% cell killing in addition to growth arrest.

(* contour thresholds, expressed as (Subscript[log, 10])(relative cell count) *)ContourThresholds=(Range[21]-21)/10.
(* contour style *)MyContourStyle=Directive[Black,AbsoluteThickness[2],Opacity[1]];

A list of contour styles at each response threshold.
Most are "None", meaning no solid line is drawn, and only a few are selected to be drawn with a solid line, as specified by "MyContourStyle".
If you wish to alter the number of solid isoboles, or the response thresholds highlighted by isoboles, edit the locations of the “MyContourStyle” entries.

(*  *)
MyListOfContourStyles={None,None,None,None,None,None,None,MyContourStyle,None,None,None,MyContourStyle,None,None,MyContourStyle,None,None,None,None,None,None};

TableForm[{100*(10^ContourThresholds),MyListOfContourStyles}\[Transpose],TableHeadings->{None,{"Viability (%)","Contour style"}}]

The isobologram analysis:

IsobologramPlot=ContourPlot[
MyInterpolationFunction[c,v],
{c,0,20},
{v,0,0.02},
Contours->ContourThresholds,
ContourStyle->MyListOfContourStyles,
PlotRange->{{0,12},{0,0.02}},
PlotRangePadding->None,
ColorFunctionScaling->None,
ColorFunction->(ColorData["BlueGreenYellow"][1.1+#/1.7]&),
FrameLabel->{"4-H-Cyclophosphamide (μM)","Vincristine (μM)"},
BaseStyle->{FontFamily->"Arial",FontSize->12},
ImageSize->250,
FrameStyle->Directive[Black,Thickness[Medium]]
];

FixedIsobologramPlot= IsobologramPlot(* the following command fixes an oddity of Mathematica where a PDF of ContourPlot shows unwanted mesh lines *) /.{EdgeForm[],r_?ColorQ,i___}:>{EdgeForm[r],r,i}

Exporting as PDF (vector art) and as high-resolution PNG (pixel art):

Export[NotebookDirectory[]<>"Isobologram analysis.pdf",FixedIsobologramPlot,"PDF"]
Export[NotebookDirectory[]<>"Isobologram analysis.png",Magnify[FixedIsobologramPlot,(* this makes a 600 dpi figure *)600/72],"PNG"]

Color scale, also highlighting the locations of isoboles :

(* custom log-scale tick marks for scale plot *)
logframeticks=Join[Table[{x,ToString[100*(10^x)]<>"%",{0,0.4}},{x,-10,10}],Flatten[Table[Table[{Log[10,x],"",{0,0.15}},{x,1*(10^y),9*(10^y),1*(10^y)}],{y,-5,5,1}],1]];

Colorscale=ContourPlot[y,{x,0,1},{y,-2.,0},Contours->ContourThresholds,ContourStyle->MyListOfContourStyles,PlotRangePadding->None,ColorFunctionScaling->None,ColorFunction->(ColorData["BlueGreenYellow"][1.1+#/1.7]&),FrameTicks->{{logframeticks,{{Log[10,0.25],"Growth arrest",{0,0.25},AbsoluteThickness[2]},{Log[10,0.25*0.2],"+80% killing",{0,0.25},AbsoluteThickness[2]},{Log[10,0.25*0.5],"+50% killing",{0,0.25},AbsoluteThickness[2]}}},{None,None}},AspectRatio->8,BaseStyle->{FontFamily->"Arial",FontSize->12},FrameStyle->Directive[Black,Thickness[Medium]],ImageSize->{{200},{200}},FrameLabel->{,"Relative viability"}];

FixedColorscale=Colorscale(* the following command fixes an oddity of Mathematica where a PDF of ContourPlot shows unwanted mesh lines *) /.{EdgeForm[],r_?ColorQ,i___}:>{EdgeForm[r],r,i}

Export[NotebookDirectory[]<>"Isobologram analysis, color scale.pdf",FixedColorscale,"PDF"]
Export[NotebookDirectory[]<>"Isobologram analysis, color scale.png",Magnify[FixedColorscale,(* this makes a 600 dpi figure *)600/72],"PNG"]