我打算繪製一條從實線變爲虛線的線形圖,以指示真實的數據和預測數據。我不確定是否需要擴展一些像XYLineAndShapeRenderer或其他類的類,或者有一些方便的方法來實現它?JFreechart(Java) - 如何繪製部分虛線和部分實線的線條?
這是一個使用Excel繪製的演示圖。
我說的是圖中的灰色線條。這就是我想要的。 我不知道是否有渲染器允許我指出哪個範圍是虛線還是實線
我打算繪製一條從實線變爲虛線的線形圖,以指示真實的數據和預測數據。我不確定是否需要擴展一些像XYLineAndShapeRenderer或其他類的類,或者有一些方便的方法來實現它?JFreechart(Java) - 如何繪製部分虛線和部分實線的線條?
這是一個使用Excel繪製的演示圖。
我說的是圖中的灰色線條。這就是我想要的。 我不知道是否有渲染器允許我指出哪個範圍是虛線還是實線
有兩種方法我可以考慮這樣做。他們沒有一個是優雅的,但這可能是你的問題的現實。
一個是你可以定義兩個系列碰巧相互連接。這可能是你最好的選擇,但你也必須修復你的傳奇。
這將使你的第二個系列展示爲虛線:
plot.getRenderer().setSeriesStroke(
1,
new BasicStroke(
2.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND,
1.0f, new float[] {6.0f, 6.0f}, 0.0f
)
編輯:我原來的「第二選擇」是錯誤的。以下是更好的方法:
覆蓋AbstractRenderer
中的getItemStroke()
方法。
final BasicStroke dashedStroke = new BasicStroke(
2.0f, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND,
1.0f, new float[] {6.0f, 6.0f}, 0.0f);
XYLineAndShapeRenderer render = new XYLineAndShapeRenderer() {
@Override
public Stroke getItemStroke(int row, int column) {
if (column < dashedThreshold) {
return lookupSeriesStroke(row);
} else {
return dashedStroke;
}
};
也許您應該爲真實數據與預測數據定義不同的數據集。改變線條樣式不僅會更簡單,而且代碼也可能更清晰。
您可以擴展XYLineAndShapeRenderer
,並覆蓋getItemStroke
在那裏你提供不同的項目不同的行程。
默認實現只是返回系列筆畫。
+1這是最好的方法。 – trashgod
+1剛剛在編輯我的視頻後看到了你的解決方案...我保證我沒有試圖撕掉你:P –
+1 ...儘管'getItemStroke'不應該每次都創建一個新的'BasicStroke'。每次重新繪製時,它都會爲每個系列的每個項目調用。 –
@ReverendGonzo好點,固定。 –
謝謝。我也是這樣想的。只是想看看有沒有更簡單的解決方案,謝謝:) – Biscuitz