Curl Global Community
グラフ上に数値を表示する方法 - Printable Version

+- Curl Global Community (https://communities.curl.com)
+-- Forum: Discussions (https://communities.curl.com/forumdisplay.php?fid=1)
+--- Forum: General Curl questions (https://communities.curl.com/forumdisplay.php?fid=2)
+--- Thread: グラフ上に数値を表示する方法 (/showthread.php?tid=162)



グラフ上に数値を表示する方法 - thiguchi - 07-27-2011

グラフ上に数値を表示する良い方法があったら教えてください。

現状は、ChartLayerのshape-factoryプロパティにTextShapeを入れて表示しています。
BarLayerの場合は割ときれいに表示されるのですが、
LineLayerの場合はプロットと数値が重なって見づらくなってしまいます・・・。

よろしくお願いします!


RE: グラフ上に数値を表示する方法 - hmino - 07-27-2011

どのような感じにみせたいのですか?


以下のLineLayerのshape-factoryのサンプルのような実装をしたのですか?
http://developers.curlap.com/curl/docs/rte/6.0/ja/docs/ja/api-ref/LineLayer.html


もし、プロットと重ならないようにするならば、ずらせばいいのではないでしょうか?
shapeにはapply-translationというメソッドがありますので、それを使えば移動できますよ。

上記のサンプルを変更する形ならこんな感じですかね。
Code:
shape-factory =
                {proc
                    {layer:LineLayer,
                     points:{FastArray-of PointRecordPair},
                     series-index:int
                    }:Shape
                    let constant fill-pattern:FillPattern =
                        {layer.get-fill-pattern-for-data-series series-index}
                    let constant group:ShapeGroup =
                        {ShapeGroup
                            arrow-body-width = 2px,
                            arrow-head-width = 8px,
                            arrow-head-length = 12px,
                            arrow-head-style = ArrowStyle.solid,
                            arrow-tail-style = ArrowStyle.none,
                            font-size = 8pt
                        }
                    {for point key idx in points do
                        {if idx < points.size - 1 then
                            || add by hmino
                            def ts={TextShape
                                       {value
                                           def fname =
                                               layer.y-axis-data[series-index].field.name
                                           {format "%.2g", point.record[fname]}
                                       },
                                       color = FillPattern.black,
                                       valign = "center"
                                   }

                            {group.add
                                {ArrowShape
                                    point.point,
                                    points[idx + 1].point,
                                    color = fill-pattern,
                                    {EllipseShape
                                        {GRect 5pt, 5pt, 5pt, 5pt},
                                        translation = point.point,
                                        color = {lighter-fill-pattern fill-pattern},
                                        ts
                                        ||delete by hmino
||--                                        {TextShape
||--                                            {value
||--                                                def fname =
||--                                                    layer.y-axis-data[series-index].field.name
||--                                                {format "%.2g", point.record[fname]}
||--                                            },
||--                                            color = FillPattern.black,
||--                                            valign = "center"
||--                                        }
                                    }
                                }
                            }
                            {ts.apply-translation 2mm, 1mm}
                        }
                    }
                    {return group}
                }

上のほうのコード削ってしまいましたが、わかりますかね?



RE: グラフ上に数値を表示する方法 - thiguchi - 07-28-2011

頂いたソースコードで確認できました。
簡単にずらせるんですね!

ありがとうございます!




RE: グラフ上に数値を表示する方法 - hmino - 07-28-2011

他にもapply-XXXXというメソッド(回転とか)がありますので使ってみてください。