我正在使用区间标记在x轴上标记[a,b]
的区域。我现在需要做两件事:
1.)我需要为该区域添加工具提示,即如果用户悬停在x的[a,b]
值之间的任何绘图区域,我应该能够显示工具提示。据我所知,我可以通过检测mouseover
的坐标并检查它们是否位于[a,b]之间并相应地显示来实现。但是,是否存在间隔标记本身的任何属性或其他一些方法呢?
2.)我需要将标签添加到该区域。我使用setLabel()
做到了。但它会水平显示标签。我想垂直标签。我搜索了一下,发现添加XYTextAnnotation
或覆盖情节渲染器的drawDomainMarker()
功能的建议。
我尝试使用前一种方法(注释),注释不会出现在正确的x值上。但是当我放大我的图表时,它们就在正确的位置。当间隔标记能够在正确的位置正确绘制间隔时,为什么会发生这种情况?
编辑1:
示例,我有这段代码:
public class Test extends ApplicationFrame {
public Test(final String title) {
super(title);
IntervalXYDataset dataset = createDataset();
JFreeChart chart = createChart(dataset);
final ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
setContentPane(chartPanel);
}
private IntervalXYDataset createDataset() {
final XYSeries series = new XYSeries("Random Data");
series.add(1.0, 400.2);
series.add(5.0, 294.1);
series.add(4.0, 100.0);
series.add(12.5, 734.4);
series.add(17.3, 453.2);
series.add(21.2, 500.2);
series.add(21.9, null);
series.add(25.6, 734.4);
series.add(30.0, 453.2);
final XYSeriesCollection dataset = new XYSeriesCollection(series);
return dataset;
}
private JFreeChart createChart(IntervalXYDataset dataset) {
final JFreeChart chart = ChartFactory.createXYBarChart("XY Series Demo", "X", false, "Y", dataset,
PlotOrientation.VERTICAL, true, true, false);
XYPlot plot = (XYPlot) chart.getPlot();
ValueMarker vm = new ValueMarker(20);
vm.setLabelOffsetType(LengthAdjustmentType.EXPAND);
vm.setPaint(Color.black);
vm.setStroke(new BasicStroke(2.0F));
vm.setLabel("FLAPS 20");
vm.setLabelFont(new Font("SansSerif", 0, 11));
vm.setLabelPaint(Color.black);
vm.setLabelAnchor(RectangleAnchor.TOP_LEFT);
vm.setLabelTextAnchor(TextAnchor.BOTTOM_LEFT);
plot.addDomainMarker(0, vm, Layer.FOREGROUND);
XYTextAnnotation textLabel = new XYTextAnnotation("Target Range", 5, 200);
textLabel.setFont(new Font("Sans Serif", Font.BOLD, 10));
textLabel.setRotationAnchor(TextAnchor.CENTER);
textLabel.setTextAnchor(TextAnchor.CENTER_LEFT);
textLabel.setRotationAngle(-3.14 / 2);
textLabel.setPaint(Color.red);
plot.addAnnotation(textLabel);
return chart;
}
public static void main(final String[] args) {
final Test demo = new Test("XY Series Demo 3");
demo.pack();
RefineryUtilities.centerFrameOnScreen(demo);
demo.setVisible(true);
}
}
如果我们在上面看到,在坐标(x = 5和y = 200)处添加了XYTextAnnotation,但是如果我在图中看到它看起来不在该位置。为什么这样?它是如何解决的?
编辑2:关于编辑1中提出的问题,我想到的是旋转发生在标签的中心周围。这就是为什么在textLabel
旋转后,位置会发生变化的原因。我需要将textLabel.setTextAnchor(TextAnchor.CENTER_LEFT);
更改为textLabel.setTextAnchor(TextAnchor.TOP_LEFT);
才能生效。此外,textAnchor
应更改为TOP_LEFT
,以使文字标签与我的地图中所需的坐标对齐。
但仍然无法实现怀疑1。
请随意纠正以上内容。
由于