JFreeChart 中的 ItemLabel 位置可以有非常多樣化的選擇,但 API 又沒有詳細的說明
故整理了一下
版本 : JCommon 1.0.15, JFreeChart 1.0.13
範例使用的 Renderer : BarRenderer
使用語法範例
ItemLabelPosition ilp = new ItemLabelPosition(
ItemLabelAnchor.INSIDE1
, TextAnchor.TOP_RIGHT
);
renderer.setBasePositiveItemLabelPosition(ilp);
主要的方位是第一個參數的 ItemLabelAnchor 在決定的,它會決定一個座標點
然後再依第二個參數的 TextAnchor 來決定要用 ItemLabel 本身的哪一個地方來對齊這個座標點
ItemLabelAnchor.INSIDE1 + TextAnchor.TOP_RIGHT : 裡面的右上方
ItemLabelAnchor.INSIDE2 + TextAnchor.TOP_RIGHT : 裡面的右上方
ItemLabelAnchor.INSIDE3 + TextAnchor.CENTER_RIGHT : 裡面的右方中央
ItemLabelAnchor.INSIDE4 + TextAnchor.BOTTOM_RIGHT : 裡面的右下方
ItemLabelAnchor.INSIDE5 + TextAnchor.BOTTOM_RIGHT : 裡面的右下方
ItemLabelAnchor.INSIDE6 + TextAnchor.BOTTOM_CENTER : 裡面的下方中央
ItemLabelAnchor.INSIDE7 + TextAnchor.BOTTOM_LEFT : 裡面的左下方
ItemLabelAnchor.INSIDE8 + TextAnchor.BOTTOM_LEFT : 裡面的左下方
ItemLabelAnchor.INSIDE9 + TextAnchor.CENTER_LEFT : 裡面的左方中央
ItemLabelAnchor.INSIDE10 + TextAnchor.TOP_LEFT : 裡面的左上方
ItemLabelAnchor.INSIDE11 + TextAnchor.TOP_LEFT : 裡面的左上方
ItemLabelAnchor.INSIDE12 + TextAnchor.TOP_CENTER : 裡面的上方中央
要注意, 由於用 INSIDE 時,若 ItemLabel 的文字會超出數列柱狀範圍時,字就會不見
故搭配不適當的 TextAnchor 時就會看不見 ItemLabel
故上面順便搭配了一下 TextAnchor 以供參考
上面搭配的不一定是唯一的選擇,而是要看方位來決定
看 BarRenderer 的 source code 中
目前有些 ItemLabelAnchor 的運算是一樣的
可能是其他 Renderer 才有差別
清單如下
INSIDE1 與 INSIDE2
INSIDE4 與 INSIDE5
INSIDE7 與 INSIDE8
INSIDE10 與 INSIDE11
ItemLabelAnchor.OUTSIDE1 : 右上方,再往上位移 offset
ItemLabelAnchor.OUTSIDE2 : 右上方,再往右位移 offset
ItemLabelAnchor.OUTSIDE3 : 右方中央
ItemLabelAnchor.OUTSIDE4 : 右下方,再往右位移 offset
ItemLabelAnchor.OUTSIDE5 : 右下方,再往下位移 offset
ItemLabelAnchor.OUTSIDE6 : 下方中央
ItemLabelAnchor.OUTSIDE7 : 左下方,再往下位移 offset
ItemLabelAnchor.OUTSIDE8 : 左下方,再往左位移 offset
ItemLabelAnchor.OUTSIDE9 : 左方中央
ItemLabelAnchor.OUTSIDE10 : 左上方,再往左位移 offset
ItemLabelAnchor.OUTSIDE11 : 左上方,再往上位移 offset
ItemLabelAnchor.OUTSIDE12 : 上方中央
在 BarRenderer 中有些 ItemLabelAnchor 的位置是相近的,只有些許差異
清單如下
OUTSIDE1 與 OUTSIDE2
OUTSIDE4 與 OUTSIDE5
OUTSIDE7 與 OUTSIDE8
OUTSIDE10 與 OUTSIDE11
這個些許差異是差在 ItemLabelAnchorOffset
可以用 renderer.setItemLabelAnchorOffset(double) 來設定
預設值是 2
用 OUTSIDE 再配合 TextAnchor 也可以將 ItemLabel 顯示在數列柱狀裡面
且也不會有文字不見的問題
故用 OUTSIDE 應該是比較適合大部份的需求
但是若文字超過 plot 的範圍時,仍然會被截掉或不見,這也是我一直感到頭痛的問題
沒有留言:
張貼留言
廣告訊息會被我刪除