# How to create a plot like this one? I think I am having issues with implementing a logarithmic axis

I am having trouble creating a type of contour plot. I have an example of what I am trying to make which is this:

and this:

I know that for the first example above, the plot was not all made in the same program. The points from the scatter series were actually just shapes that were superimposed onto the contour plot photo.. But this to me is a very sloppy solution. Part of it may have been made in Origin Pro as well.

Effectively this is a contour plot that represents a figure of merit (FOM) value which has some meaning for comparison purposes across different samples, for evaluation purposes. Rs is sheet resistance and should go on the x axis, and transmittance is t and should go on the y axis.

I have been able to come up with a close solution in Mathematica. Here is my code: code

(*Figure of Merit Equation*)
FOM[t_, rs_, m_, n_] := t^m/rs^(1/n)

(*Equation Parameters*)
m = 1;
n = 10;

(*DataSets*)

nPBDFGroup = {{1287.89, 0.848}, {542.40, 0.8143}, {310.33,
0.7069}, {234.61, 0.6815}, {211.34, 0.6219}, {180.82,
0.5666}, {282.23, 0.72}, {148.20, 0.62}, {1218.40,
0.7592}, {528.12, 0.6193}, {391.13, 0.4827}}

ITOGroup = {{28.00, 0.89}, {10.80, 0.88}, {12.60, 0.88}, {11.00,
0.88}, {11.20, 0.88}, {21.00, 0.97}, {152.00, 0.891}, {23.00,
0.905}, {11.00, 0.917}, {76.00, 0.89}, {26.20, 0.76}, {6.70,
0.84}, {10.55, 0.89}, {19.50, 0.85}, {27.60, 0.85}, {4125.00,
0.98}, {93.33, 0.98}, {38.89, 0.9037}, {28.86, 0.9185}, {12.20,
0.85}, {32.10, 0.85}, {15.70, 0.85}, {12.20, 0.85}, {13.90,
0.85}, {14.40, 0.85}, {16.00, 0.85}, {17.00, 0.85}, {18.60,
0.85}, {20.40, 0.85}, {22.30, 0.85}}

N2200Group = {{14285714.00, 0.743}}

BBLGroup = {{10869.57, 0.1259}}

PEDOTPSSLit = {{17.00, 0.972}, {38.00, 0.96}, {112.00, 0.92}, {46.00,
0.9}, {112.00, 0.92}, {60.00, 0.86}, {67.00, 0.87}, {39.00,
0.81}, {660.65, 0.8177}, {179.14, 0.8226}, {164.28,
0.7303}, {83.24, 0.7363}, {1352.08, 0.8394}, {740.75,
0.8401}, {196.97, 0.7595}, {107.81, 0.7559}, {580.42,
0.7387}, {210.13, 0.6503}, {137.31, 0.6114}, {698.52,
0.8104}, {171.58, 0.7248}, {703.86, 0.8437}, {186.18, 0.75}}

brightnessFactor = 0.4;  (*Adjust as needed*)

isolineSimple =
ContourPlot[FOM[t, rs, m, n], {rs, 0, 1500}, {t, 0.5, 1},
Contours -> {0.30, 0.35, 0.40, 0.45, 0.50}, ContourLabels -> True,
FrameLabel -> {"Sheet Resistance (\[CapitalOmega]/\[EmptySquare])",
"Transmittance @ 550 nm"},
PlotLabel -> StringForm["FOM(G), m=, n=, ", m, n],
PlotLegends -> Automatic,
ContourStyle -> Directive[Dashed, Black, Opacity[0.8]],
Epilog -> {(*Red points for Group 1 with different symbols*)Red,
PointSize[0.02],
Point[nPBDFGroup],(*Blue points for Group 2 with different \
symbols*)Blue, PointSize[0.02], Point[ITOGroup]}, Frame -> True];

Show[isolineSimple]


isolineAll =
ContourPlot[FOM[t, rs, m, n], {rs, 0, 1500}, {t, 0, 1},
Contours -> {0.30, 0.35, 0.40, 0.45, 0.50}, ContourLabels -> True,
FrameLabel -> {"Sheet Resistance (\[CapitalOmega]/\[EmptySquare])",
"Transmittance"},
PlotLabel -> StringForm["FOM(G), m=, n=, ", m, n],
PlotLegends -> Automatic,
ContourStyle -> Directive[Dashed, Black, Opacity[0.8]],
Epilog -> {(*Red points for Group 1 with different symbols*)Red,
PointSize[0.02],
Point[nPBDFGroup],(*Blue points for group 1 with different \
symbols*)Blue, PointSize[0.02],
Point[ITOGroup], (*Yellow points for group 2 with different \
symbols*)Yellow, PointSize[0.02],
Point[N2200Group],(*Purple points for group 3 with different \
symbols*)Purple, PointSize[0.02],
Point[BBLGroup], (*Orange points for Group 4 with different \
symbols*)Orange, PointSize[0.02], Point[PEDOTPSSLit]}, Frame -> True];

Show[isolineAll]


(*Example of attempt at implementing X-axis Log Scale*)
logScaling[x_] := Log10[x];

isolineLogScale =
ContourPlot[
FOM[t, logScaling[rs], m, n], {rs, 1, 100000000}, {t, 0, 1},
Contours -> {0.30, 0.35, 0.40, 0.45, 0.50}, ContourLabels -> True,
FrameLabel -> {"Sheet Resistance (\[CapitalOmega]/\[EmptySquare])",
"Transmittance"},
PlotLabel -> StringForm["FOM(G), m=, n=, ", m, n],
PlotLegends -> Automatic,
ContourStyle -> Directive[Dashed, Black, Opacity[0.8]],
ScalingFunctions -> {"Linear", "Linear"},
Epilog -> {Red, PointSize[0.02], Point[nPBDFGroup], Blue,
PointSize[0.02], Point[ITOGroup], Purple, PointSize[0.02],
Point[N2200Group], Orange, PointSize[0.02], Point[BBLGroup],
Green, PointSize[0.02], Point[PEDOTPSSLit]}, Frame -> True];

Show[isolineLogScale]


One of the challenges is that there are some values on the x-axis are much larger than the majority, but I still want to show them. I feel as if the log scale along the X should help address that but I am not sure how to implement a scale similar to the one used in the example plot? I would like to keep the Y scale linear

Also, I would like to know how I can add a label to the vertical contour legend on the right as well as use different symbols for each data series.

Thanks in advance! I appreciate any assistance

Also, I think this may just be a math question but i am a little confused. In a separate paper that disclosed this method of plotting such data, they had contour plots that looked like that had 'transmittance' on the x axis and 'sheet resistance' on the y axis. In that case, the isolines were shown as curving to the right and up (looking from left to right, like an upside-down candy cane).

However, in these two reference examples, the isolines seem to be drawn in the same fashion, even though the x and y axis have been flipped. Wouldn't the contour lines need to be looking more like a candy cane, (going up and to the right)? Or am i missing something that would be fixed by having a logarithmic axis along the X-axis?

Thanks!

curving up.

This is a paper that used Mathematica to make a plot of this type which I tried to follow: https://www.sciencedirect.com/science/article/pii/S2211379719323897

Something like this perhaps, using ScalingFunctions to get the Log scale in the x axis, and manually taking the Log of the x-values of the points.

ContourPlot[FOM[t, rs, m, n], {rs, 1, 1500}, {t, 0.5, 1},
Contours -> {0.30, 0.35, 0.40, 0.45, 0.50}, ContourLabels -> True,
FrameLabel -> {"Sheet Resistance (\[CapitalOmega]/\[EmptySquare])",
"Transmittance @ 550 nm"},
PlotLabel -> StringForm["FOM(G), m=, n=, ", m, n],
PlotLegends -> Automatic,
ContourStyle -> Directive[Dashed, Black, Opacity[0.8]],
Epilog -> {Red, PointSize[0.02],
Point[{Log10[#[[1]]], #[[2]]} & /@ nPBDFGroup], Blue,
Point[{Log10[#[[1]]], #[[2]]} & /@ ITOGroup]},
Frame -> True, ScalingFunctions -> {"Log10", Automatic}]


Alternatively, using show to combine the contour plot and a list plot:

cp = ContourPlot[FOM[t, rs, m, n], {rs, 1, 1500}, {t, 0.5, 1},
Contours -> {0.30, 0.35, 0.40, 0.45, 0.50}, ContourLabels -> True,
FrameLabel -> {"Sheet Resistance (\[CapitalOmega]/\[EmptySquare])",
"Transmittance @ 550 nm"},
PlotLabel -> StringForm["FOM(G), m=, n=, ", m, n],