I'm working with Options to change the look and feel of some generated Graphics by passing Options to several functions, one of them being Export[]
. For example:
Options[myPlot] := {Resolution -> 325, Size -> 12, FileName -> "A",
PlotStyle -> Automatic};
myPlot[f_, opts : OptionsPattern[myPlot]] := Block[{fig},
(* ... some calculations here *)
fig = Plot[f[x], {x, -\[Pi], \[Pi]},
Evaluate[FilterRules[{opts}, Options[Plot]]]];
fig = Show[fig, ImageSize -> OptionValue[Size]*72/2.54];+
Export[OptionValue[FileName] <> ".png", fig, FilterRules[{opts}, Options[Export]]];
Print[fig];
]
And using f[x_] := x^2
use the function as
myPlot[f, Resolution -> 120, PlotStyle -> Red]
The Option to plot the function in Red
is passed correctly to Plot
but Resolution
is not passed to Export
. This is of course due to the fact that Options[Export] = {}
.
My question is:
How can I still pass Options to Export
(i.e. how to determine, which are available, if they are not written in Options[Export]
?
And closely related:
How to do that on your own, i.e. now I defined PlotStyle
to be an Option of myPlot
, though it's only passed on, how can I pass Options, that I haven't given myself, without getting the message
OptionValue::nodef: "Unknown option PlotStyle for ...
Answer
Extraction of Export
options
To extract the options for specific image export formats automatically, I really don't know an easy way. What you can do is to use Trace
in combination with ExportString
to investigate what Mathematica is doing. To make the next thing work you have to call e.g. ExportString["test", "GIF"];
for every format at least once:
ExportString["test", #]; & /@ {"PNG", "GIF", "BMP", "JPEG"}
System`ConvertersDump`exportOptions /@ {"PNG", "GIF", "BMP", "JPEG"}
(*
{{"BitDepth", "ColorSpace",
"DataType"}, {"AnimationRepetitions", "Background", "FrameRate",
"TransitionEffect", "TransparentColor",
"UserInputFlag"}, {"BitDepth", "ColorSpace", "DataType",
"HorizontalResolution", "RLECompression",
"VerticalResolution"}, {"BitDepth", "ColorSpace"}}
*)
which is unfortunately very distinct from the documentation. For some exporters you find for instance such stuff
Options[System`ConvertersDump`exportGraphicsToGIFConverter]
(*
{Background -> None, ImageResolution -> Automatic,
ImageSize -> Automatic, "ImageTopOrientation" -> Top,
"ColorReductionPalette" -> 256, "ColorReductionDither" -> True,
"GlobalColorMap" -> True}
*)
But how to find this automatically? I have no idea. Checkout this too
Options[System`ConvertersDump`exportToBitmapConverter]
Options[System`ConvertersDump`exportToColormappedBitmapConverter]
Setting up options for own functions
Say you want to setup a function which can take its own options, options of Plot
and options of NMinimize
. Furthermore, you want to specify some of the default option-values for Plot
and NMinimize
. You can set the function up and use it like follows:
Options[f] = {
fopt1 -> Automatic,
fopt2 -> True,
PlotStyle -> Green,
AccuracyGoal -> 1
};
f[x_, opts : OptionsPattern[{f, Plot, NMinimize}]] := Module[{},
Print["Given Options usable by f only:",
FilterRules[{opts}, Options[f]]];
Print["Given Options usable by Plot only:",
FilterRules[{opts}, Options[Plot]]];
Print["Given Options usable by NMinimize only:",
FilterRules[{opts}, Options[NMinimize]]];
Print["Defaultvalue for not specified options:" ];
Print[OptionValue[StepMonitor]];
Print[OptionValue[PlotRange]];
Print[OptionValue[fopt2]];
]
Test case
f[x, fopt1 -> Full, PlotStyle -> Yellow, AccuracyGoal -> 42]
(*
Given Options usable by f only:{fopt1->Full,PlotStyle->RGBColor[1,1,0],AccuracyGoal->42}
Given Options usable by Plot only:{PlotStyle->RGBColor[1,1,0]}
Given Options usable by NMinimize only:{AccuracyGoal->42}
Defaultvalue for not specified options:
None
{Full,Automatic}
True
*)
And now you can pass any other option of Plot
or NMinimize
without a warning. But be carful, something like Method
is an option for many functions and would be passed to each approapriate.
Comments
Post a Comment