6

LevelSchemeを使い始めたばかりですが、ヒストグラムを図に正しく合わせるのに問題があります。最小限の機能しない例:

<<"LevelScheme`"
Figure[{FigurePanel[{{0, 1}, {0, 1}},
   LabB -> textit["x"], BufferB -> 2.5,
   LabL -> textit["p(x)"], BufferL -> 2.5,
   FrameTicks -> {LinTicks[-4, 4], LinTicks[0, 1]},
   PlotRange -> {{-3, 3}, {0, 0.5}}], 
  RawGraphics[
   Histogram[RandomReal[NormalDistribution[], 1000], Automatic, 
    "ProbabilityDensity"]]},
 Frame -> False, PlotRange -> {{-0.075, 1.1}, {-0.1, 1.03}}]

出力は次のようになります

ここに画像の説明を入力してください

このように見えるべきとき

ここに画像の説明を入力してください

基本的に、グラフィックスオブジェクトは'sにHistogram従わず、代わりにメインの'sに従います。がまたは同様のコマンドに置き換えられた場合、この動作は発生しません。したがって、以下はクリーンなプロットを生成しますFigurePanelPlotRangeFigurePlotRangeHistogramPlot

Figure[{FigurePanel[{{0, 1}, {0, 1}},
   LabB -> textit["x"], BufferB -> 2.5,
   LabL -> textit["p(x)"], BufferL -> 2.5,
   FrameTicks -> {LinTicks[-4, 4], LinTicks[0, 1]},
   PlotRange -> {{-3, 3}, {0, 0.5}}], 
  RawGraphics[Plot[1/Sqrt[2 Pi] Exp[-x^2/2], {x, -4, 4}]]},
 Frame -> False, PlotRange -> {{-0.075, 1.1}, {-0.1, 1.03}}]

ここに画像の説明を入力してください

他の誰かがこの問題に遭遇しましたか?または、修正の提案がありますか?

編集

質問にグリーンを追加すると思いました。私はまだこのハードルを克服する方法を知ることに興味があります。

4

3 に答える 3

4

まあ、私はあなたがこれをあまり好きではないだろうと思いますが、それは一種の回避策です。

PerformanceGoal -> "Speed"(ではなく)ヒストグラムオプションとして指定するとPerformanceGoal -> "Quality"、インタラクティブな動作が無効になりますが、いくつかの小さな調整を加えると、次のようになります。

<< "LevelScheme`"
Figure[{FigurePanel[{{0, 1}, {0, 1}}, LabB -> textit["x"], 
   BufferB -> 2.5, LabL -> textit["p(x)"], BufferL -> 2.5, 
   FrameTicks -> {LinTicks[-4, 4], LinTicks[0, 1]}, 
   PlotRange -> {{-3, 3}, {0, 0.55}}], 
  RawGraphics[
   Histogram[RandomReal[NormalDistribution[], 1000], Automatic, 
    "ProbabilityDensity", PerformanceGoal -> "Speed"]]}, 
 Frame -> False, PlotRange -> {{-0.075, 1.1}, {-0.15, 1.1}}]

ここに画像の説明を入力してください

于 2011-04-27T15:57:22.650 に答える
2

Simonがコメントで述べたように、LevelScheme'sを使用DataPlotしてヒストグラムをプロットできます。

<< "LevelScheme`"
histData[x_] := 
  Cases[x, RectangleBox[{bl_, _}, {br_, c_}] :> {{bl, br}, c}, 
   Infinity];
hist = histData[
   Histogram[RandomReal[NormalDistribution[], 1000], {-4, 4, 0.1}, 
    "ProbabilityDensity"]];
bins = hist[[All, 1, 1]]; counts = hist[[All, 2]];
data = Table[{bins[[i]], counts[[i]]}, {i, 1, Length@counts}];

Figure[{FigurePanel[{{0, 1}, {0, 1}}, LabB -> textit["x"], 
   BufferB -> 2.5, LabL -> textit["p(x)"], BufferL -> 2.5, 
   FrameTicks -> {LinTicks[-4, 4], LinTicks[0, 1]}, 
   PlotRange -> {{-3, 3}, {0, 0.5}}],
  DataPlot[data, 
   DataLine -> {LineShape -> "Histogram", LineColor -> Darker@Blue}, 
   DataSymbol -> {SymbolSize -> 0.00001}],
  RawGraphics[
   Plot[1/Sqrt[2 Pi] Exp[-x^2/2], {x, -4, 4}, 
    PlotStyle -> {Red, Thick}]]
  }, Frame -> False, PlotRange -> {{-0.075, 1.1}, {-0.1, 1.03}}]

ここに画像の説明を入力してください

ただし、Histogramまたはによって生成されたような塗りつぶされたヒストグラムバーを取得することはできませんBarChartでした。それが、あなたが意図したものでもあった場合です。

ところで、この関数histDataは私がずっと前に数学のヘルプフォーラムで見たものに似ていて、それは私の便利な関数ツールキットに入っていました。どこで、いつ読んだのか、クレジットするのか覚えていません。しかし、当時のように、今の私にとっては魔法の機能のすべてではありません。

于 2011-04-26T23:25:15.757 に答える
1

問題が何であるかはわかっていますが、すぐに修正することはできません。LevelSchemeが機能する方法は、Graphicsオブジェクトが正しくフィットするようにオブジェクトを変換することです。これを行うには、LevelSchemeパッケージのv。3.51に含まれてRawGraphicsいるレガシー関数TransformGraphicsを使用します。のを見ると、生成されたオブジェクトの種類を処理することについて何も知らないことがわかります。Mark Caprioは、今後数か月にわたってLevelSchemeの更新に取り組んでいるため、途中で修正される可能性があります。それまでの間、ヒストグラムをに提供する前にを使用してみてください。ただし、良い結果が得られない場合があります。LegacyPackages\Graphics\Graphics.mLegacyTransformGraphics.mFullFormHistogramTransformGraphicsRasterizeRawGraphics

編集:のレガシーバージョンを使用する代わりにTransformGraphics、より新しいバージョンは次のようになります

TransformGraphics[ 
  (g:(Graphics | Graphics3D))[prims__, opts:OptionsPattern[], transform_]:=
    g[ GeometricTransformation[prims, transform], opts ]

もちろん、トリックは現在、受け入れることができるtransformバージョンを提供しています。GeometricTransformationただし、レガシーTransformGraphicsは、2番目の引数である関数をで見つかったポイントに直接適用するgため、上記のコードを使用すると、追加の変更なしで機能する可能性があります。

試してみるには、Needs["LevelScheme`LegacyTransformGraphics`"]LevelScheme.nb(およびLevelScheme.mを再生成)またはLevelScheme.mのいずれかで上記のコードに直接置き換えてください。オプションがどこに置き換えられるかわからないため、完全には機能しない可能性がありますが、開始する必要があります。

于 2011-03-29T17:19:24.733 に答える