- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
从这个问题开始JavaFX LineChart Hover Values我在第一个答案中修改了 Gist https://gist.github.com/jewelsea/4681797进入这个
public class TestCharts extends Application
{
ObservableList<XYChart.Data<Integer, Integer>> _serie;
@SuppressWarnings("unchecked")
@Override
public void start(Stage stage) {
LineChart lineChart = new LineChart(new NumberAxis(), new NumberAxis());
XYChart.Series serie = new XYChart.Series(
"Test",
getTestValues()
);
lineChart.getData().add(serie);
lineChart.setCursor(Cursor.CROSSHAIR);
lineChart.setTitle("First Chart");
stage.setTitle("First Chart");
stage.setScene(new Scene(lineChart, 500, 400));
stage.show();
secondHandChart();
}
private void secondHandChart() {
LineChart lineChart = new LineChart(new NumberAxis(), new NumberAxis());
XYChart.Series serie = new XYChart.Series(
"Test",
getTestValues()
);
lineChart.getData().add(serie);
lineChart.setCursor(Cursor.CROSSHAIR);
lineChart.setTitle("Second Chart");
Stage stage = new Stage();
stage.setTitle("Second Chart");
stage.setScene(new Scene(lineChart, 500, 400));
stage.show();
}
private ObservableList<XYChart.Data<Integer, Integer>> getTestValues() {
return plot(23, 14, 15, 24, 34, 36, 22, 45, 43, 17, 29, 25);
}
public ObservableList<XYChart.Data<Integer, Integer>> plot(int... y) {
if (_serie == null) {
_serie = FXCollections.observableArrayList();
int i = 0;
while (i < y.length) {
XYChart.Data<Integer, Integer> data = new XYChart.Data<>(i + 1, y[i]);
data.setNode(
new HoveredThresholdNode(
(i == 0) ? 0 : y[i - 1],
y[i]
)
);
_serie.add(data);
i++;
}
return _serie;
}
else {
return FXCollections.observableArrayList(_serie);
}
}
/**
* a node which displays a value on hover, but is otherwise empty
*/
class HoveredThresholdNode extends StackPane
{
HoveredThresholdNode(int priorValue, int value) {
setPrefSize(8, 8);
final Label label = createDataThresholdLabel(priorValue, value);
setOnMouseEntered(new EventHandler<MouseEvent>()
{
@Override
public void handle(MouseEvent mouseEvent) {
getChildren().setAll(label);
setCursor(Cursor.NONE);
toFront();
}
});
setOnMouseExited(new EventHandler<MouseEvent>()
{
@Override
public void handle(MouseEvent mouseEvent) {
getChildren().clear();
setCursor(Cursor.CROSSHAIR);
}
});
}
private Label createDataThresholdLabel(int priorValue, int value) {
final Label label = new Label(value + "");
label.setStyle("-fx-font-size: 20; -fx-font-weight: bold;");
label.setMinSize(Label.USE_PREF_SIZE, Label.USE_PREF_SIZE);
return label;
}
}
public static void main(String[] args) { launch(args); }
}
这个类唯一的目的就是展示我的问题。我想得到两个相同系列的图表,getTestValues()。问题是:第二个图表是完美的 (2° Img) 但第一个 (1° Img) 缺少 HoveredThresholdNode,当我调整第一个图表的大小时,第二个图表中的 HoveredThresholdNodes 正在改变位置(3° 图像)。我如何获得系列的副本,其中还包含这些节点的副本?我知道打印同一个系列没有意义,但实际上我有两个系列列表,每个列表都有一个图表,两个列表一起有一个图表用于比较 pourposes。不管怎样,这个问题可以简化为两个图表中的一个系列。
最佳答案
XYChart.Data 不能跨图表共享,因为它有一个添加到图表的节点。
要在图表之间共享数据,您必须
一个简单的例子:
@SuppressWarnings({ "unchecked", "rawtypes" })
public class TestChart extends Application {
// the shared x/y data pairs
private ObservableList<XYData<Integer, Integer>> backingData;
/**
* Custom xy data class which exposes its values as properties and nothing
* else.
*/
public static class XYData<X, Y> {
private ObjectProperty<X> xValue;
private ObjectProperty<Y> yValue;
public XYData(X xValue, Y yValue) {
this.xValue = new SimpleObjectProperty<>(this, "xValue", xValue);
this.yValue = new SimpleObjectProperty<>(this, "yValue", yValue);
}
public ObjectProperty<X> xValueProperty() {
return xValue;
}
public void setXValue(X value) {
xValueProperty().set(value);
}
public X getXValue() {
return xValueProperty().get();
}
public ObjectProperty<Y> yValueProperty() {
return yValue;
}
public void setYValue(Y value) {
yValueProperty().set(value);
}
public Y getYValue() {
return yValueProperty().get();
}
}
@Override
public void start(Stage stage) {
if (backingData == null) {
backingData = createBackingData();
}
LineChart lineChart = new LineChart(new NumberAxis(), new NumberAxis());
XYChart.Series serie = new XYChart.Series("Test", createChartData());
lineChart.getData().add(serie);
lineChart.setCursor(Cursor.CROSSHAIR);
lineChart.setTitle("First Chart");
stage.setTitle("First Chart");
stage.setScene(new Scene(lineChart, 500, 400));
stage.show();
secondHandChart();
}
private void secondHandChart() {
LineChart lineChart = new LineChart(new NumberAxis(), new NumberAxis());
XYChart.Series serie = new XYChart.Series("Test", createChartData());
lineChart.getData().add(serie);
lineChart.setCursor(Cursor.CROSSHAIR);
lineChart.setTitle("Second Chart");
Stage stage = new Stage();
stage.setTitle("Second Chart");
stage.setScene(new Scene(lineChart, 500, 400));
stage.show();
}
private ObservableList<XYData<Integer, Integer>> createBackingData() {
ObservableList<XYData<Integer, Integer>> data = FXCollections
.observableArrayList();
Integer[] values = { 23, 14, 15, 24, 34, 36, 22, 45, 43, 17, 29, 25 };
for (int i = 0; i < values.length; i++) {
data.add(new XYData(i, values[i]));
}
return data;
}
private ObservableList<XYChart.Data<Integer, Integer>> createChartData() {
ObservableList<XYChart.Data<Integer, Integer>> chartData = FXCollections
.observableArrayList();
for (int i = 0; i < backingData.size(); i++) {
XYData<Integer, Integer> b = backingData.get(i);
XYChart.Data<Integer, Integer> cd = new XYChart.Data<>(
b.getXValue(), b.getYValue());
cd.XValueProperty().bind(b.xValueProperty());
cd.YValueProperty().bind(b.yValueProperty());
cd.setNode(new HoveredThresholdNode(
(i == 0) ? 0 : backingData.get(i - 1).getYValue(),
backingData.get(i).getYValue()));
chartData.add(cd);
}
return chartData;
}
/**
* a node which displays a value on hover, but is otherwise empty
*/
class HoveredThresholdNode extends StackPane {
HoveredThresholdNode(int priorValue, int value) {
setPrefSize(8, 8);
final Label label = createDataThresholdLabel(priorValue, value);
setOnMouseEntered(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent mouseEvent) {
getChildren().setAll(label);
setCursor(Cursor.NONE);
toFront();
}
});
setOnMouseExited(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent mouseEvent) {
getChildren().clear();
setCursor(Cursor.CROSSHAIR);
}
});
}
private Label createDataThresholdLabel(int priorValue, int value) {
final Label label = new Label(value + "");
label.setStyle("-fx-font-size: 20; -fx-font-weight: bold;");
label.setMinSize(Label.USE_PREF_SIZE, Label.USE_PREF_SIZE);
return label;
}
}
public static void main(String[] args) {
launch(args);
}
}
关于JavaFX 在两个图表中打印相同的 XYChart.Series,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49770442/
有时,我倾向于(重复)执行next next a 来获取特定元素。当您需要 2 次或更少的遍历时,这很有效。然而,它很快就会变得很麻烦。对于这个简单的情况,循环的开销太大。 幸运的是,如果您知道位置,
我在使用值为 numpy 数组的 pandas.Series 时遇到了以下奇怪的行为。 % s = pd.Series([5,2], index=[6,7]) %s.loc[6] 5 <-- ret
我有一个看起来像这样的数据框(小版本): A B C 0 125 ADB [AF:12] 1 189 ACB [AF:78, AF:85, AF:98] 2 148 ADB
我在 Pandas (s1) 中创建了一个系列,用于根据原始 DataFrame 中的列 ('d1') 计算这些固定数字 (1-14) 的实例数。我想要的显示在这里(时报); s1 Last
pandas series 有两个密切相关的属性:Series.index 和 Series.index.values。 这两个中的第一个返回某些 pandas 索引类型的当前索引。它是可变的,可用于
我正在尝试使用 KNNClassifier 训练模型。我将数据拆分如下: X_train, X_test, y_train, y_test = train_test_split(X_bow, y, t
我只是尝试对我的数据框进行排序并使用了以下函数: df[df.count >= df.count.quantile(.95)] 返回错误: AttributeError: 'function' obj
我试过了 print(type(numbers[2])) numbers[2].tolist() print(type(numbers[2])) 那是行不通的。我得到了 Numbers 是一个矩阵
我想从时间戳中减去日期。settings.dataset_end_date 是一个 pandas._libs.tslibs.timestamps.Timestamp引用['date_of_patent
我有一个带有数据的 pandas.core.series.Series 0 [00115840, 00110005, 001000033, 00116000... 1 [00267285,
s = pd.Series( nr.randint( 0, 10, 5 ), index=nr.randint(0, 10, 5 ) ) s 输出 1 3 7 6 2 0 9
pandas.DataFrame.query() 方法非常适合在加载或绘图时(预/后)过滤数据。它对于方法链特别方便。 我发现自己经常想将相同的逻辑应用于 pandas.Series,例如在完成诸如返
这个问题在这里已经有了答案: Difference between map, applymap and apply methods in Pandas (11 个回答) 去年关闭。 Series.ma
我正在总结一系列中的值,但根据我如何做,我会得到不同的结果。我试过的两种方法是: sum(df['series']) df['series'].sum() 为什么它们会返回不同的值? 示例代码。 s
我有一个字符串说 type(abc) >>str 我想把它转换成 pandas.core.series.Series。 我在 pandas 文档中看到有一段代码 pd.to_string() 将 pa
我有一个字符串说 type(abc) >>str 我想把它转换成 pandas.core.series.Series。 我在 pandas 文档中看到有一段代码 pd.to_string() 将 pa
这个问题在这里已经有了答案: Pandas: select DF rows based on another DF (5 个答案) 关闭 5 年前。 如果我有一个包含开始时间和结束时间的 DataF
我尝试了 Series.index 和 Series.keys() 并且输出是相似的。我找不到它们之间的显着差异。它们是否适用于某些特殊条件? 我在 Anaconda 上的 Jupyter Noteb
我有一个(非常大的)系列,其中包含关键字(例如,每行包含多个由“-”分隔的关键字 In[5]: word_series Out[5]: 0 the-cat-is-pink 1
我需要使用 pandas.read_excel 通过 Python 获取 Excel 电子表格最后一个单元格的值。该单元格包含一个日期,我需要将其分配给 Python 脚本中的变量。格式为2018-1
我是一名优秀的程序员,十分优秀!