匹配图例和绘图尺寸

4
请考虑:

请考虑以下几点:

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]

enter image description here

如何让图例列的大小适应绘图区域的高度?

当调整行大小时,需要使用网格。这就是为什么我在网格中进行了复制。

2个回答

9

处理图像尺寸。(* <- *) 标记了您代码中的重要修改,其余主要是字体大小的调整:

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]

在这里输入图片描述

我将亮度列反转了,以达到美观的效果。

编辑

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

编辑回答@500下面的评论

表达式:

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

这真的是一个可行的替代方案,用于获取绘图的图像大小,而原本应该起作用但实际上并没有起作用:

   ImageSize -> {Automatic, Last@AbsoluteOptions[FindD1,"ImageSize"]}   

因此,IntegerPart[...] 的作用是获取绘图图像的垂直尺寸,并将 imgSize 乘以 Plot 的 AspectRatio
要理解其运作方式,请运行代码,然后键入:
AbsoluteOptions[FindD1] 

您可以在那里看到绘图选项。然后Cases[]函数只是提取了AspectRatio选项。

事实上,有一种更简洁的方法来完成Cases[]所做的事情。那就是:

AbsoluteOptions[FindD1,"AspectRatio"] 

但是 AbsoluteOptions 函数中还存在另一个 bug,这导致我们无法以这种方式使用它。


你能解释一下以下的部分吗?我认为它根据图形自身条件性地调整了图例的y大小,但我不理解这部分:IntegerPart@First[imgSize Cases[AbsoluteOptions[FindD1], HoldPattern[AspectRatio -> x_] -> x]] - 500

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

enter image description here


非常感谢!但我必须承认,我还无法掌握单位或缩放的概念 :-) 所以它仍然是魔术。我希望我们在所有情况下都能谈论像素! - 500

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接