TabView[{
"2D Plot Wizard"->
DynamicModule[
{eq=Sin[x], domainmin=-10, domainmax=10, rangemin=-2, rangemax=2, func=Plot, currentplot="plot", frame=False, thick=Medium, dash=None, plotcolor=Blue, tickstatus=Automatic, tickxmin=1, tickxmax=5, tickxstep=1, tickymin=1, tickymax=2, tickystep=1, insetsize=0, insetdomainmin=2.5, insetdomainmax=3.5, insetposx=4, listjoin=False,insetposy=1.5, insetbackcolor=White, insetrangemin=0, insetrangemax=2,gridstatus=None, gridxmin=1, gridxmax=3, gridxstep=1, gridymin=0, gridymax=1, gridystep=0.1, xlabel=None, xlabelcolor=Black, xlabelfont=Times, ylabel="Y Label", ylabelcolor=Blue, ylabelfont=Courier, plotlabel=None, plotlabelcolor=Blue, plotlabelfont=Times, imagesize=4, colorfunction=None,axesonoff=True, mesh=None, axesoriginx=Automatic, axesoriginy=0, filling=None, fillingcolor=LightBlue, backcolor=White, xratio=1.5, yratio=2, previewsize=150, list="enter file path"},
TabView[{
"Enter Equation or Data"->
Panel[
Column[{
Row[{
Column[{
Row[{
"Enter Equation:  ",
InputField[Dynamic[TraditionalForm[eq],(eq=#)&]]
}],
Row[{
"Variable x domain from: ",
InputField[Dynamic[domainmin], FieldSize->3],
" to ",
InputField[Dynamic[domainmax],  FieldSize->3]
}],
Row[{
"Variable x range from: ",
InputField[Dynamic[rangemin],  FieldSize->3],
" to ",
InputField[Dynamic[rangemax],  FieldSize->3]
}],
"____________________",
" ",
Row[{
"Enter Data (file path):  ",
InputField[Dynamic[list]]
}],
PopupMenu[Dynamic[func],{Plot,LogPlot, DiscretePlot, ListPlot}],
Button["Update Plot", 
If[func===ListPlot,
currentplot=
func[Import[list][[1]], 
PlotRange->{rangemin,rangemax},
Frame->frame,
Joined->listjoin,
PlotStyle->{Thickness[thick], Dashing[dash], plotcolor},
Ticks->
If[tickstatus===Specific,
{Range[tickxmin, tickxmax, tickxstep], Range[tickymin, tickymax, tickystep]},
tickstatus
],
Epilog->Inset[Plot[eq, {x, insetdomainmin, insetdomainmax}, PlotRange->{insetrangemin, insetrangemax},ImageSize->insetsize, Frame->True], {insetposx, insetposy}, Background->insetbackcolor],
GridLines->
If[gridstatus===Specific,
{Range[gridxmin, gridxmax, gridxstep], Range[gridymin, gridymax, gridystep]},
gridstatus
],
AxesLabel->
If[xlabel===None,
None,
{Style[xlabel, xlabelcolor, FontFamily->xlabelfont], Style[ylabel, ylabelcolor, FontFamily->ylabelfont]}
],
PlotLabel->
If[plotlabel===None,
None,
Style[plotlabel, plotlabelcolor, FontFamily->plotlabelfont]
],
ImageSize->111*imagesize,
ColorFunction->colorfunction,
Mesh->mesh,
AxesOrigin->
If[axesoriginx===Automatic,
Automatic,
{axesoriginx, axesoriginy}
],
Filling->filling,
 FillingStyle->fillingcolor,
Background->backcolor,
Axes->axesonoff,
AspectRatio->
If[xratio===Automatic,
Automatic,
(xratio/yratio)]
], 
currentplot=
func[eq, {x, domainmin, domainmax}, 
PlotRange->{rangemin,rangemax},
Frame->frame,
PlotStyle->{Thickness[thick], Dashing[dash], plotcolor},
Ticks->
If[tickstatus===Specific,
{Range[tickxmin, tickxmax, tickxstep], Range[tickymin, tickymax, tickystep]},
tickstatus
],
Epilog->Inset[Plot[eq, {x, insetdomainmin, insetdomainmax}, PlotRange->{insetrangemin, insetrangemax},ImageSize->insetsize, Frame->True], {insetposx, insetposy}, Background->insetbackcolor],
GridLines->
If[gridstatus===Specific,
{Range[gridxmin, gridxmax, gridxstep], Range[gridymin, gridymax, gridystep]},
gridstatus
],
AxesLabel->
If[xlabel===None,
None,
{Style[xlabel, xlabelcolor, FontFamily->xlabelfont], Style[ylabel, ylabelcolor, FontFamily->ylabelfont]}
],
PlotLabel->
If[plotlabel===None,
None,
Style[plotlabel, plotlabelcolor, FontFamily->plotlabelfont]
],
ImageSize->111*imagesize,
ColorFunction->colorfunction,
Mesh->mesh,
AxesOrigin->
If[axesoriginx===Automatic,
Automatic,
{axesoriginx, axesoriginy}
],
Filling->filling,
 FillingStyle->fillingcolor,
Background->backcolor,
Axes->axesonoff,
AspectRatio->
If[xratio===Automatic,
Automatic,
(xratio/yratio)]
]
],
ImageSize->120, Method->"Queued"]
}],
Dynamic[currentplot]
}],
Style["Mathematica language to recreate this particular plot:",Bold],
Button["Input Form",
Last[{
options=Flatten[DeleteCases[Map[optionlist[#]&, {Frame->frame, Filling->filling, PlotStyle->{Thickness[thick], Dashing[dash], plotcolor},Axes->axesonoff, Ticks->tickstatus, GridLines->gridstatus, AxesLabel->xlabel, ImageSize->imagesize*111, AxesOrigin->axesoriginx, Background->backcolor, AspectRatio->(xratio/yratio), PlotLabel->plotlabel}], {}]],
nb=CreateDocument[];,
NotebookWrite[nb, Cell["Language to create default version of plot: ", "Text"]],
If[func===ListPlot,
NotebookWrite[nb,Cell[ToString[HoldForm[e[Import["enter file path"][[1]]]]/.{e->func,a->domainmin, b->domainmax, c->list, d->options}],"Input"]],
NotebookWrite[nb,Cell[ToString[HoldForm[e[c, {x, a, b}]]/.{e->func,a->domainmin, b->domainmax, c->InputForm[eq], d->options}],"Input"]]
],
NotebookWrite[nb, Cell["Language to create plot with current options (excluding inset graphic): ", "Text"]],
If[func===ListPlot,
NotebookWrite[nb,Cell[ToString[HoldForm[e["enter file path", d]]/.{e->func,a->domainmin, b->domainmax, c->list, d->options}],"Input"]],
NotebookWrite[nb,Cell[ToString[HoldForm[e[c, {x, a, b}, d]]/.{e->func,a->domainmin, b->domainmax, c->InputForm[eq], d->options}],"Input"]]
]
}], ImageSize->120, Method->"Queued"
]
}]
],
"Refine Plot"->
Column[{
Row[{
Style["Mouseover for instant example, Preview Size:  ", Bold,Blue],
InputField[Dynamic[previewsize], FieldSize->4]
}],
Row[{
Tooltip["Frame Around Plot: ", 
Row[{" True → ",Plot[eq, {x, domainmin, domainmax}, PlotRange->{rangemin, rangemax},Frame->True, ImageSize->Dynamic[previewsize]], " False → ",Plot[eq, {x, domainmin, domainmax}, PlotRange->{rangemin, rangemax},Frame->False, ImageSize->Dynamic[previewsize]]}]],
InputField[Dynamic[frame], FieldSize->4]
}],
Row[{
Tooltip["Filling for Plot: ", 
Row[{" None → ",Plot[eq, {x, domainmin, domainmax}, PlotRange->{rangemin, rangemax},Filling->None, ImageSize->Dynamic[previewsize]], " Axis → ",Plot[eq, {x, domainmin, domainmax}, PlotRange->{rangemin, rangemax},Filling->Axis, ImageSize->Dynamic[previewsize]],  " Bottom → ",Plot[eq, {x, domainmin, domainmax}, PlotRange->{rangemin, rangemax},Filling->Bottom, ImageSize->Dynamic[previewsize]], " Top →"}]],
InputField[Dynamic[filling], FieldSize->4],
" Color for filling: ",
InputField[Dynamic[fillingcolor], FieldSize->12]
}],
Row[{
Tooltip["Color of Plot: ", 
Row[{" Red → ",Plot[eq, {x, domainmin, domainmax}, PlotRange->{rangemin, rangemax},PlotStyle->Red, ImageSize->Dynamic[previewsize]], " Blue → ",Plot[eq, {x, domainmin, domainmax}, PlotRange->{rangemin, rangemax},PlotStyle->Blue, ImageSize->Dynamic[previewsize]]," Yellow → ",Plot[eq, {x, domainmin, domainmax}, PlotRange->{rangemin, rangemax},PlotStyle->Yellow, ImageSize->Dynamic[previewsize]]}]],
InputField[Dynamic[plotcolor], FieldSize->10]
}],
Row[{
Tooltip["Show Axes: ", 
Row[{" True → ",Plot[eq, {x, domainmin, domainmax}, PlotRange->{rangemin, rangemax},Axes->True, ImageSize->Dynamic[previewsize]], " False → ",Plot[eq, {x, domainmin, domainmax}, PlotRange->{rangemin, rangemax},Axes->False, ImageSize->Dynamic[previewsize]]}]],
InputField[Dynamic[axesonoff], FieldSize->10]
}],
Row[{
Tooltip["Dashing for Plot: ", 
Row[{"  False → ",Plot[eq, {x, domainmin, domainmax}, PlotRange->{rangemin, rangemax}, ImageSize->Dynamic[previewsize]], "  0.01 → ",Plot[eq, {x, domainmin, domainmax}, PlotRange->{rangemin, rangemax},PlotStyle->Dashing[0.01], ImageSize->Dynamic[previewsize]],"  0.05 → ",Plot[eq, {x, domainmin, domainmax}, PlotRange->{rangemin, rangemax},PlotStyle->Dashing[0.05], ImageSize->Dynamic[previewsize]]}]],
InputField[Dynamic[dash], FieldSize->4]
}],
Row[{
Tooltip["Join Points (ListPlot only): ", 
Row[{"  False → ",ListPlot[{{0,0}, {1,1}, {2,2}}, PlotRange->{rangemin, rangemax}, Joined->False,ImageSize->Dynamic[previewsize]], "  True → ",ListPlot[{{0,0}, {1,1}, {2,2}}, PlotRange->{rangemin, rangemax}, Joined->True, ImageSize->Dynamic[previewsize]]}]],
InputField[Dynamic[listjoin], FieldSize->6]
}],
Row[{
Tooltip["Thickness for Plot: ", 
Row[{" 0 → ",Plot[eq, {x, domainmin, domainmax}, PlotRange->{rangemin, rangemax},ImageSize->Dynamic[previewsize]], "  0.02 → ",Plot[eq, {x, domainmin, domainmax}, PlotRange->{rangemin, rangemax},PlotStyle->Thickness[0.02], ImageSize->Dynamic[previewsize]],"  Tiny → ",Plot[eq, {x, domainmin, domainmax}, PlotRange->{rangemin, rangemax},PlotStyle->Thickness[Tiny], ImageSize->Dynamic[previewsize]]}]],
InputField[Dynamic[thick], FieldSize->4]
}],
Row[{
Tooltip["Ticks for Plot: ", 
Row[{" None → ",Plot[eq, {x, domainmin, domainmax}, PlotRange->{rangemin, rangemax},Ticks->None, ImageSize->Dynamic[previewsize]], " Automatic → ",Plot[eq, {x, domainmin, domainmax}, PlotRange->{rangemin, rangemax},Ticks->Automatic, ImageSize->Dynamic[previewsize]]," Specific → ",Plot[eq, {x, domainmin, domainmax}, PlotRange->{rangemin, rangemax},Ticks->{Range[1,2,0.5], Range[1,2,0.5]}, ImageSize->Dynamic[previewsize]]}]],
InputField[Dynamic[tickstatus], FieldSize->7]
}],
Column[{
Row[{
Tooltip["     Specific Tick Values (Frame must be set to False): ", 
Row[{" 1 to 2, steps of 0.5 → ",Plot[eq, {x, domainmin, domainmax}, PlotRange->{rangemin, rangemax},Ticks->{Range[1,2,0.5], Range[1,2,0.5]}, ImageSize->Dynamic[previewsize]], " -2π to 2π, steps of π → ",Plot[eq, {x, domainmin, domainmax}, PlotRange->{rangemin, rangemax},Ticks->{Range[-2π,2π,π], Range[-2π,2π,π]}, ImageSize->Dynamic[previewsize]]}]]
}],
Row[{
"     x axis low: ",
InputField[Dynamic[tickxmin], FieldSize->2],
"  x axis high: ",
InputField[Dynamic[tickxmax], FieldSize->2],
"  x axis step size: ",
InputField[Dynamic[tickxstep], FieldSize->2]
}],
Row[{
"     y axis low: ",
InputField[Dynamic[tickymin], FieldSize->2],
"  y axis high: ",
InputField[Dynamic[tickymax], FieldSize->2],
"  y axis step size: ",
InputField[Dynamic[tickystep], FieldSize->2]
}]
}],
Row[{
Tooltip["Gridlines for Plot: ", 
Row[{" None → ",Plot[eq, {x, domainmin, domainmax}, PlotRange->{rangemin, rangemax},GridLines->None, ImageSize->Dynamic[previewsize]], " Automatic → ",Plot[eq, {x, domainmin, domainmax}, PlotRange->{rangemin, rangemax},GridLines->Automatic, ImageSize->Dynamic[previewsize]]," Specific → ",Plot[eq, {x, domainmin, domainmax}, PlotRange->{rangemin, rangemax},GridLines->{Range[1,2,0.5], Range[1,2,0.5]}, ImageSize->Dynamic[previewsize]]}]],
InputField[Dynamic[gridstatus], FieldSize->7]
}],
Column[{
Row[{
Tooltip["     Specific Gridline Values: ", 
Row[{" 1 to 2, steps of 0.5 → ",Plot[eq, {x, domainmin, domainmax}, PlotRange->{rangemin, rangemax},GridLines->{Range[1,2,0.5], Range[1,2,0.5]}, ImageSize->Dynamic[previewsize]], " -2π to 2π, steps of π → ",Plot[eq, {x, domainmin, domainmax}, PlotRange->{rangemin, rangemax},GridLines->{Range[-2π,2π,π], Range[-2π,2π,π]}, ImageSize->Dynamic[previewsize]]}]]
}],
Row[{
"     x axis low: ",
InputField[Dynamic[gridxmin], FieldSize->2],
"  x axis high: ",
InputField[Dynamic[gridxmax], FieldSize->2],
"  x axis step size: ",
InputField[Dynamic[gridxstep], FieldSize->2]
}],
Row[{
"     y axis low: ",
InputField[Dynamic[gridymin], FieldSize->2],
"  y axis high: ",
InputField[Dynamic[gridymax], FieldSize->2],
"  y axis step size: ",
InputField[Dynamic[gridystep], FieldSize->2]
}]
}],
Row[{
Tooltip["Size of Inset Graphic: ", 
Row[{" 0 → ",Plot[eq, {x, domainmin, domainmax}, PlotRange->{rangemin, rangemax},Epilog->Inset[Plot[eq, {x, insetdomainmin, insetdomainmax}, ImageSize->0, Frame->True], {insetposx, insetposy}, Background->insetbackcolor],ImageSize->Dynamic[previewsize]], "  120, White → ",Plot[eq, {x, domainmin, domainmax}, PlotRange->{rangemin, rangemax},Epilog->Inset[Plot[eq, {x, insetdomainmin, insetdomainmax}, ImageSize->previewsize/4, Frame->False, Ticks->None], {0, 0}, Background->White], ImageSize->Dynamic[previewsize]],"  240, Gray → ",Plot[eq, {x, domainmin, domainmax}, PlotRange->{rangemin, rangemax},Epilog->Inset[Plot[eq, {x, insetdomainmin, insetdomainmax}, ImageSize->previewsize/2, Frame->False, Ticks->None], {0, 0}, Background->Gray], ImageSize->Dynamic[previewsize]]}]],
InputField[Dynamic[insetsize], FieldSize->4],
" Background Color:  ",
InputField[Dynamic[insetbackcolor], FieldSize->8]
}],
Row[{
Tooltip["     Inset Graphic, X Position: ", 
Row[{" Pos: 1,1  Domain: 0,1  Range: 0,1 → ",Plot[eq, {x, domainmin, domainmax}, PlotRange->{rangemin, rangemax},Epilog->Inset[Plot[eq, {x, 0, 1}, ImageSize->previewsize/2, PlotRange->{0,1},Frame->False, Ticks->None], {1, 1}, Background->LightRed],ImageSize->Dynamic[previewsize]]}]],
InputField[Dynamic[insetposx], FieldSize->4],
" Y Position:  ",
InputField[Dynamic[insetposy], FieldSize->4],
" Domain Low: ",
InputField[Dynamic[insetdomainmin], FieldSize->4],
" Domain High: ",
InputField[Dynamic[insetdomainmax], FieldSize->4],
" Range Low: ",
InputField[Dynamic[insetrangemin], FieldSize->4],
" Range High: ",
InputField[Dynamic[insetrangemax], FieldSize->4]
}],
Row[{
Tooltip["Label for X Axis (write in quotes): ", 
Row[{" None → ",Plot[eq, {x, domainmin, domainmax}, PlotRange->{rangemin, rangemax}, ImageSize->Dynamic[previewsize]], " Velocity, Blue, Courier → ",Plot[eq, {x, domainmin, domainmax}, PlotRange->{rangemin, rangemax},AxesLabel->{Style["Velocity", Blue, FontFamily->"Courier"], Style["Y Label", Red, FontFamily->"Arial"]}, ImageSize->Dynamic[previewsize]]}]],
InputField[Dynamic[xlabel], FieldSize->6],
"Color: ",
InputField[Dynamic[xlabelcolor], FieldSize->12],
"Font: ",
InputField[Dynamic[xlabelfont], FieldSize->5]
}],
Row[{
Tooltip["Label for Y Axis (write in quotes): ", 
Row[{" None → ",Plot[eq, {x, domainmin, domainmax}, PlotRange->{rangemin, rangemax}, ImageSize->Dynamic[previewsize]], " Velocity, Green, Arial → ",Plot[eq, {x, domainmin, domainmax}, PlotRange->{rangemin, rangemax},AxesLabel->{Style["X Label", Blue, FontFamily->"Courier"], Style["Velocity", Green, FontFamily->"Arial"]}, ImageSize->Dynamic[previewsize]]}]],
InputField[Dynamic[ylabel], FieldSize->6],
"Color: ",
InputField[Dynamic[ylabelcolor], FieldSize->12],
"Font: ",
InputField[Dynamic[ylabelfont], FieldSize->5]
}],
Row[{
Tooltip["Label for plot (write in quotes): ", 
Row[{" None → ",Plot[eq, {x, domainmin, domainmax}, PlotRange->{rangemin, rangemax}, ImageSize->Dynamic[previewsize]], " Experiment 1 → ",Plot[eq, {x, domainmin, domainmax}, PlotRange->{rangemin, rangemax},PlotLabel->"Experiment 1", ImageSize->Dynamic[previewsize]]}]],
InputField[Dynamic[plotlabel], FieldSize->7]
}],
Row[{
Tooltip["Size of plot image (inches): ", 
Row[{" 100 → ",Plot[eq, {x, domainmin, domainmax}, PlotRange->{rangemin, rangemax}, ImageSize->100], " 200 → ",Plot[eq, {x, domainmin, domainmax}, PlotRange->{rangemin, rangemax}, ImageSize->200]}]],
InputField[Dynamic[imagesize], FieldSize->4]
}],
Row[{
Tooltip["Origin placement of axes (x value): ", 
Row[{" Automatic → ",Plot[eq, {x, domainmin, domainmax}, PlotRange->{rangemin, rangemax}, AxesOrigin->Automatic,ImageSize->Dynamic[previewsize]]," (0,0) → ",Plot[eq, {x, domainmin, domainmax}, PlotRange->{rangemin, rangemax}, AxesOrigin->{0,0},ImageSize->Dynamic[previewsize]], " (-1,-1) → ",Plot[eq, {x, domainmin, domainmax}, PlotRange->{rangemin, rangemax}, AxesOrigin->{-1,-1},ImageSize->Dynamic[previewsize]]}]],
InputField[Dynamic[axesoriginx], FieldSize->7],
"y value: ",
InputField[Dynamic[axesoriginy], FieldSize->7]
}],
Row[{
Tooltip["Background color: ", 
Row[{" White → ",Plot[eq, {x, domainmin, domainmax}, PlotRange->{rangemin, rangemax}, Background->White,ImageSize->Dynamic[previewsize]], " Red → ",Plot[eq, {x, domainmin, domainmax}, PlotRange->{rangemin, rangemax}, Background->Red,ImageSize->Dynamic[previewsize]], " LightRed → ",Plot[eq, {x, domainmin, domainmax}, PlotRange->{rangemin, rangemax}, Background->LightRed,ImageSize->Dynamic[previewsize]]}]],
InputField[Dynamic[backcolor], FieldSize->7]
}],
Row[{
Tooltip["Apect ratio (x axis size): ", 
Row[{" 1,1 → ",Plot[eq, {x, domainmin, domainmax}, PlotRange->{rangemin, rangemax}, AspectRatio->1/1,ImageSize->Dynamic[previewsize]], " 1,4 → ",Plot[eq, {x, domainmin, domainmax}, PlotRange->{rangemin, rangemax}, AspectRatio->1/4,ImageSize->Dynamic[previewsize]], " 4,1 → ",Plot[eq, {x, domainmin, domainmax}, PlotRange->{rangemin, rangemax}, AspectRatio->4/1,ImageSize->Dynamic[previewsize/3]]}]],
InputField[Dynamic[xratio], FieldSize->4],
" y axis size: ",
InputField[Dynamic[yratio], FieldSize->4]
}]
}]
}],  Initialization:>(optionlist[option_]:=
Complement[{option},
{Frame->False,
Joined->False,
PlotStyle->{Thickness[Medium], Dashing[None], RGBColor[0,0,1]},
Ticks->Automatic,
GridLines->None,
AxesLabel->None, 
PlotLabel->None,
Background->GrayLevel[1],
ColorFunction->None,
AxesOrigin->Automatic,
Filling->None,
FillingStyle->RGBColor[0.87`,0.94`,1],
Axes->True,
AspectRatio->Automatic}
])
]
}]