- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Looking this post ,我曾尝试在 javaFX 中实现一个散点图 3D,但遇到了很多困难,其中网格是我的 x、y 和 z 轴,而球体是我的点。
如何沿轴放置图例、轴标签和范围编号?我只能使用没有外部库的 javaFX。我很绝望..我试了好几天..没有结果请帮我谢谢。
代码
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import javafx.application.Application;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.PerspectiveCamera;
import javafx.scene.Scene;
import javafx.scene.SceneAntialiasing;
import javafx.scene.input.ScrollEvent;
import javafx.scene.layout.Pane;
import javafx.scene.layout.StackPane;
import javafx.scene.paint.Color;
import javafx.scene.paint.Paint;
import javafx.scene.paint.PhongMaterial;
import javafx.scene.shape.Line;
import javafx.scene.shape.Rectangle;
import javafx.scene.shape.Sphere;
import javafx.scene.transform.Rotate;
import javafx.stage.Stage;
public class GraphingData extends Application {
private static Random rnd = new Random();
// size of graph
int graphSize = 400;
// variables for mouse interaction
private double mousePosX, mousePosY;
private double mouseOldX, mouseOldY;
private final Rotate rotateX = new Rotate(150, Rotate.X_AXIS);
private final Rotate rotateY = new Rotate(120, Rotate.Y_AXIS);
@Override
public void start(Stage primaryStage) {
// create axis walls
Group grid = createGrid(graphSize);
// initial cube rotation
grid.getTransforms().addAll(rotateX, rotateY);
// add objects to scene
StackPane root = new StackPane();
root.getChildren().add(grid);
root.setStyle( "-fx-border-color: red;");
// create bars
double gridSizeHalf = graphSize / 2;
double size = 30;
//Drawing a Sphere
Sphere sphere = new Sphere();
//Setting the properties of the Sphere
sphere.setRadius(10.0);
sphere.setTranslateX(-50);
sphere.setTranslateY(-50);
//Preparing the phong material of type specular color
PhongMaterial material6 = new PhongMaterial();
//setting the specular color map to the material
material6.setDiffuseColor(Color.GREEN);
sphere.setMaterial(material6);
grid.getChildren().addAll(sphere);
// scene
Scene scene = new Scene(root, 1600, 900, true, SceneAntialiasing.BALANCED);
scene.setCamera(new PerspectiveCamera());
scene.setOnMousePressed(me -> {
mouseOldX = me.getSceneX();
mouseOldY = me.getSceneY();
});
scene.setOnMouseDragged(me -> {
mousePosX = me.getSceneX();
mousePosY = me.getSceneY();
rotateX.setAngle(rotateX.getAngle() - (mousePosY - mouseOldY));
rotateY.setAngle(rotateY.getAngle() + (mousePosX - mouseOldX));
mouseOldX = mousePosX;
mouseOldY = mousePosY;
});
makeZoomable(root);
primaryStage.setResizable(false);
primaryStage.setScene(scene);
primaryStage.show();
}
/**
* Axis wall
*/
public static class Axis extends Pane {
Rectangle wall;
public Axis(double size) {
// wall
// first the wall, then the lines => overlapping of lines over walls
// works
wall = new Rectangle(size, size);
getChildren().add(wall);
// grid
double zTranslate = 0;
double lineWidth = 1.0;
Color gridColor = Color.RED;
for (int y = 0; y <= size; y += size / 10) {
Line line = new Line(0, 0, size, 0);
line.setStroke(gridColor);
line.setFill(gridColor);
line.setTranslateY(y);
line.setTranslateZ(zTranslate);
line.setStrokeWidth(lineWidth);
getChildren().addAll(line);
}
for (int x = 0; x <= size; x += size / 10) {
Line line = new Line(0, 0, 0, size);
line.setStroke(gridColor);
line.setFill(gridColor);
line.setTranslateX(x);
line.setTranslateZ(zTranslate);
line.setStrokeWidth(lineWidth);
getChildren().addAll(line);
}
}
public void setFill(Paint paint) {
wall.setFill(paint);
}
}
public void makeZoomable(StackPane control) {
final double MAX_SCALE = 20.0;
final double MIN_SCALE = 0.1;
control.addEventFilter(ScrollEvent.ANY, new EventHandler<ScrollEvent>() {
@Override
public void handle(ScrollEvent event) {
double delta = 1.2;
double scale = control.getScaleX();
if (event.getDeltaY() < 0) {
scale /= delta;
} else {
scale *= delta;
}
scale = clamp(scale, MIN_SCALE, MAX_SCALE);
control.setScaleX(scale);
control.setScaleY(scale);
event.consume();
}
});
}
/**
* Create axis walls
*
* @param size
* @return
*/
private Group createGrid(int size) {
Group cube = new Group();
// size of the cube
Color color = Color.LIGHTGRAY;
List<Axis> cubeFaces = new ArrayList<>();
Axis r;
// back face
r = new Axis(size);
r.setFill(color.deriveColor(0.0, 1.0, (1 - 0.5 * 1), 1.0));
r.setTranslateX(-0.5 * size);
r.setTranslateY(-0.5 * size);
r.setTranslateZ(0.5 * size);
cubeFaces.add(r);
// bottom face
r = new Axis(size);
r.setFill(color.deriveColor(0.0, 1.0, (1 - 0.4 * 1), 1.0));
r.setTranslateX(-0.5 * size);
r.setTranslateY(0);
r.setRotationAxis(Rotate.X_AXIS);
r.setRotate(90);
cubeFaces.add(r);
// right face
r = new Axis(size);
r.setFill(color.deriveColor(0.0, 1.0, (1 - 0.3 * 1), 1.0));
r.setTranslateX(-1 * size);
r.setTranslateY(-0.5 * size);
r.setRotationAxis(Rotate.Y_AXIS);
r.setRotate(90);
// cubeFaces.add( r);
// left face
r = new Axis(size);
r.setFill(color.deriveColor(0.0, 1.0, (1 - 0.2 * 1), 1.0));
r.setTranslateX(0);
r.setTranslateY(-0.5 * size);
r.setRotationAxis(Rotate.Y_AXIS);
r.setRotate(90);
cubeFaces.add(r);
// top face
r = new Axis(size);
r.setFill(color.deriveColor(0.0, 1.0, (1 - 0.1 * 1), 1.0));
r.setTranslateX(-0.5 * size);
r.setTranslateY(-1 * size);
r.setRotationAxis(Rotate.X_AXIS);
r.setRotate(90);
// cubeFaces.add( r);
// front face
r = new Axis(size);
r.setFill(color.deriveColor(0.0, 1.0, (1 - 0.1 * 1), 1.0));
r.setTranslateX(-0.5 * size);
r.setTranslateY(-0.5 * size);
r.setTranslateZ(-0.5 * size);
// cubeFaces.add( r);
cube.getChildren().addAll(cubeFaces);
return cube;
}
public static double normalizeValue(double value, double min, double max, double newMin, double newMax) {
return (value - min) * (newMax - newMin) / (max - min) + newMin;
}
public static double clamp(double value, double min, double max) {
if (Double.compare(value, min) < 0)
return min;
if (Double.compare(value, max) > 0)
return max;
return value;
}
public static Color randomColor() {
return Color.rgb(rnd.nextInt(255), rnd.nextInt(255), rnd.nextInt(255));
}
public static void main(String[] args) {
launch(args);
}
}
最佳答案
下面是在轴上创建一些度量的基本思路。它不是生产就绪的,但应该给你足够的开始。
private Group createGrid(int size) {
// existing code omitted...
cube.getChildren().addAll(cubeFaces);
double gridSizeHalf = size / 2;
double labelOffset = 30 ;
double labelPos = gridSizeHalf - labelOffset ;
for (double coord = -gridSizeHalf ; coord < gridSizeHalf ; coord+=50) {
Text xLabel = new Text(coord, labelPos, String.format("%.0f", coord));
xLabel.setTranslateZ(labelPos);
xLabel.setScaleX(-1);
Text yLabel = new Text(labelPos, coord, String.format("%.0f", coord));
yLabel.setTranslateZ(labelPos);
yLabel.setScaleX(-1);
Text zLabel = new Text(labelPos, labelPos, String.format("%.0f", coord));
zLabel.setTranslateZ(coord);
cube.getChildren().addAll(xLabel, yLabel, zLabel);
zLabel.setScaleX(-1);
}
return cube;
}
我只想在图表外放置一个图例,它只是一个不旋转的 2D 网格 Pane ...
关于java - 3D散点图JavaFX : How to show legend and measures near axis,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41884239/
我正在为 ggpubr 中的图例位置而苦苦挣扎。我知道我可以修改图例位置 p.e.通过 ggpar(legend = "bottom")。但是,如何将图例标题放在图例键上方? 在 ggplot2 中,
SMF foo tax foo 我有一个来自网页的 html 源代码,上面给出了其中的一部分。现在我想获取 HREF仅当 tax 时的值?所
我想知道是否可以在页眉中插入图例。这样,图例也可以具有与整个文档相关的层次结构。 我在下面有更多相关的文字,但需要为读者突出显示。在这种情况下,个人信息将同时为 legend 和 h2。 h1 是站点
它们似乎都有效,并且都用于 https://matplotlib.org/users/legend_guide.html 中的示例中,尽管 plt.legend 在那里更常见。什么时候应该使用它们?
我无法更改图中分割图例的颜色。我需要两种不同的颜色作为图例和视觉图中的文本。 er<- ggmap(sq_map2) + geom_point(data = sisquoc, size
不幸的是,这件事有多长,我没有办法解决它,因为我没有 build 它,但基本上我要做的就是确保这些值设置为两个小数点,无论它。如果是 100,我希望它读取 100.00,这似乎是我遇到的问题。本节的代
目前,互联网上还没有使用 dc.js 和 dc.legend() 函数实现具有图例的气泡图的示例。 that.sessions_scatterplot .width(830)
我需要 PieChart 中的垂直图例。现在库仅提供 2 个选项:顶部/右侧。如果使用正确 - 图例在几列中。我需要一列中的图例。 我发现了一个 hack - 正确的变换值并将图例放在一列中。 v
将多个黄砖图表放入子图排列时遇到问题。标题和图例仅显示最后一个图表。我尝试了多种编写代码的方法,但无法让所有方法都显示图例和标题。我敢肯定,上类很简单。 这是一段代码: f, ((ax1, ax2),
下面的树状图有两个级别。我想显示顶级节点(节点 A 和节点 B)的图例。对于我使用过的其他类型的图表,图例可以自动生成,也可以明确定义。使用树状图,看起来一个不是自动生成的,如果我明确定义一个,它永远
我们已经使用 jqPlot 实现了 donut chart 。 我们如何将图例添加到 donut chart 的中心? 在此先感谢您的帮助。 最佳答案 根据 jqPlot 文档的建议:jqplot d
我想去掉图例中名称和百分比之间的空格。在图片中,我用黄色突出显示了空间。 例如,我希望第一个图例项是“立陶宛 (30.5%)”。 “立陶宛”和“30.5%”之间的额外空格破坏了我的用户界面。 我的图例
我正在尝试将 AmChart 图表图例合并为一行,但运气不佳。图例是分开的(一个代表一行)。 文档 http://docs.amcharts.com/3/javascriptcharts/AmLege
有人知道是否可以在 Grafana 中定义自定义图例值吗? 来自documentation ,有一些可能的功能: Legend Values Additional values can be show
我需要一个从字典生成数据的代码的图例。我不知道字典中有多少键有没有办法对此进行“动态”图例? import matplotlib.pyplot as plt for host in d.keys():
我有一个 fieldset 工作 - 这是代码: Signed In Users (2
当我将以下样式应用于图例标签时 display: inline; width: 300px; 我看到图例标签的宽度为 300px 它仍然接受宽度。 Here是一个演示。这个元素有什么特别之处吗,因为我
这个问题在这里已经有了答案: Matplotlib: figlegend only printing first letter (2 个回答) pyplot legend label being tr
我有这个代码: List legends = new ArrayList<>(lineChart.lookupAll("Label.chart-legend-item")); Legend legen
我的数据是这样的: service,rating_1,rating_2,rating_3,rating_4,rating_5 renew_patent,0,0,1,2,11 apply_benefit
我是一名优秀的程序员,十分优秀!