gpt4 book ai didi

wolfram-mathematica - 匹配图例和绘图大小

转载 作者:行者123 更新时间:2023-12-04 22:15:31 25 4
gpt4 key购买 nike

请考虑 :

intense = Reverse[Round[Rationalize /@ N[10^Range[0, 3, 1/3]]]];
values = Range[0, 9/10, 1/10];

intensityLegend = Column[Prepend[MapThread[
Function[{intensity, values},
Row[{Graphics[{(Lighter[Blue, values]),
Rectangle[{0, 0}, {4, 1}], Black,
Text[Style[ToString[intensity], 16, Bold], {2, .5}]}]}]],
{intense, values}], Text[Style["Photons Number", Bold, 15]]]];

IntersectionDp1={{1., 588.377}, {2.15443, 580.306}, {4.64159, 573.466}, {10.,560.664},
{21.5443, 552.031}, {46.4159, 547.57}, {100.,545.051},
{215.443, 543.578}, {464.159, 542.281}, {1000., 541.346}}


FindD1=ListLogLinearPlot[Map[List, IntersectionDp1],
Frame -> True,
AxesOrigin -> {-1, 0},
PlotMarkers ->
With[{markerSize = 0.04}, {Graphics[{Lighter[Blue, #], Disk[]}],
markerSize} & /@Range[9/10, 0, -1/10]], Filling -> Axis,
FillingStyle -> Opacity[0.8],
PlotRange -> {{.5, 1100}, {540, 600}},
ImageSize->400];

Grid[{{intensityLegend, FindD1}, {intensityLegend, FindD1}},
ItemSize -> {50, 20}, Frame -> True]

我怎样才能让图例列大小适合绘图区的高度?

虽然行调整大小我需要使用网格。这就是我在网格中复制的原因。

最佳答案

使用图像尺寸。 (* <- *) 标记对代码的重要修改,其余主要是字体大小:

intense = Reverse[Round[Rationalize /@ N[10^Range[0, 3, 1/3]]]];
values = Range[0, 9/10, 1/10];
imgSize = 400; (* <- *)
Off[Ticks::ticks]

IntersectionDp1 = {{1., 588.377}, {2.15443, 580.306}, {4.64159, 573.466},
{10., 560.664}, {21.5443, 552.031}, {46.4159, 547.57}, {100., 545.051},
{215.443, 543.578}, {464.159, 542.281}, {1000., 541.346}}

FindD1 = ListLogLinearPlot[Map[List, IntersectionDp1], Frame -> True,
AxesOrigin -> {-1, 0},
PlotMarkers ->
With[{markerSize = 0.04},
{Graphics[{Lighter[Blue, #], Disk[]}], markerSize} &
/@ Range[9/10, 0, -1/10]], Filling -> Axis, FillingStyle -> Opacity[0.8],
PlotRange -> {{.5, 1100}, {540, 600}}, ImageSize -> imgSize]; (* <- *)

intensityLegend =
Rasterize[Column[
Prepend[
Reverse@MapThread[ (* <- *)
Function[{intensity, values},
Row[{Graphics[{(Lighter[Blue, values]),
Rectangle[{0, 0}, {4, 1}], Black,
Text[Style[ToString[intensity], 30, Bold], {2, .5}]}]}]],
{intense, values}],
Text[Style["Photons Number", Bold, 25]]]],
ImageSize -> {Automatic, (* <- *)
IntegerPart@
First[imgSize Cases[AbsoluteOptions[FindD1],
HoldPattern[AspectRatio -> x_] -> x]]}];

Grid[{{intensityLegend, FindD1}, {intensityLegend, FindD1}}, Frame -> True]

出于美学目的,我反转了强度列。

编辑

如果您没有为 Plot 明确指定 ImageSize 选项,您会令人失望地发现 AbsoluteOptions[Plot, "ImageSize"] 返回 "Automatic" !

编辑 在下面回答@500 的评论

表达方式:
   ImageSize -> {Automatic,                                             (* <- *) 
IntegerPart@
First[imgSize Cases[AbsoluteOptions[FindD1],
HoldPattern[AspectRatio -> x_] -> x]]}];

确实可以替代应该可以使用 但不能使用 来获取 Plot 图像大小的东西:
   ImageSize -> {Automatic, Last@AbsoluteOptions[FindD1,"ImageSize"]}   

因此, IntegerPart[...] 所做的是获取绘图图像的垂直尺寸,将 imgSize 乘以绘图的 AspectRatio
要了解它是如何工作的,请运行代码,然后键入:
AbsoluteOptions[FindD1] 

你会在那里看到 Plot 选项。然后 Cases[] 函数只是提取 AspectRatio 选项。

事实上,有一种更简洁的方式来做 Cases[] 所做的事情。这是:
AbsoluteOptions[FindD1,"AspectRatio"] 

但是 AbsoluteOptions 函数中还有另一个错误阻止我们以这种方式使用它。

关于wolfram-mathematica - 匹配图例和绘图大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7786778/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com