在java中,如何从x轴开始获取条形图中的条形图?
如图所示,图表中的条形图从x轴下方开始。如何修复它,使其从x轴线开始?请给我建议一个解决方案,我也会帮助你知道我哪里出了问题在java中,如何从x轴开始获取条形图中的条形图?,java,eclipse,swing,awt,bar-chart,Java,Eclipse,Swing,Awt,Bar Chart,如图所示,图表中的条形图从x轴下方开始。如何修复它,使其从x轴线开始?请给我建议一个解决方案,我也会帮助你知道我哪里出了问题 private int PAD = 20; private int LPAD = 35; private int DPAD = 25; Graphics2D g2 = (Graphics2D) g; g2.setColor(Color.BLACK); String DataString[] = dataset.split(",
private int PAD = 20;
private int LPAD = 35;
private int DPAD = 25;
Graphics2D g2 = (Graphics2D) g;
g2.setColor(Color.BLACK);
String DataString[] = dataset.split(", ");
double DataArray[] = new double[DataString.length];
double MaxValue = 0;
int w = getWidth();
int h = getHeight();
for (int i = 0; i < DataString.length; i = i + 1) {
try {
double out = Double.parseDouble(DataString[i]);
DataArray[i] = out;
if (out > MaxValue) {
MaxValue = out;
}
} catch (NumberFormatException e) {
}
}
double xScale = (w - 1 * (PAD + LPAD)) / (DataArray.length) - 1;
double yScale = (h - 3 * DPAD) / MaxValue;
// The initial x,y (0).
int x0 = LPAD;
try {
if (DataArray.length > 1) {
// Draw Graph
g2.drawLine(PAD + LPAD, PAD, PAD + LPAD, h - (PAD + LPAD));
g2.drawLine(PAD + LPAD, h - PAD - LPAD, x0 + (int) (DataArray.length * xScale), h - (PAD + LPAD));
Color cd = new Color(135, 90, 185);
g2.setPaint(cd);
g2.drawString(title, w / 4, padding - 15);
g2.drawString(xAxis, w / 2 - padding, h - (padding - 10));
g2.rotate(Math.toRadians(270));
g2.drawString(yAxis, -(h / 2 + padding) - LPAD, PAD - 5);
g2.rotate(-Math.toRadians(270));
g2.setPaint(Color.BLACK);
double intin = Double.parseDouble(interval);
double sin = Double.parseDouble(start);
for (int j = 0; j < DataArray.length; j++) {
int x1 = x0 + (int) (j * xScale) + PAD;
double y1 = (int) ((MaxValue - DataArray[j]) * yScale + PAD) - 2;
// g2.drawLine(x1-3, (int) y1-3, x1+3, (int) y1+3);
// g2.drawLine(x1-3,(int) y1+3,x1+3,(int) y1-3);
// g2.drawLine(x1, h - (PAD + LPAD), x1, h - (PAD +
// LPAD)+5);
double intout = (sin + (intin * j));
String interval = String.valueOf(intout);
g2.drawString(interval, x1, h - LPAD);
}
for (int i = 0; i < 9; i++) {
int x3 = PAD + LPAD;
int x1 = x3 - 5;
int y0 = (h - (PAD)) - (((i + 1) * (h - PAD * 3)) / 10 + DPAD) - 2;
int y3 = y0;
g2.drawLine(x3, y0, x1, y3);
}
// g2.drawLine(PAD + LPAD, h - (PAD + LPAD), PAD + LPAD - 5,
// h - (PAD + LPAD));
g2.drawLine(PAD + LPAD, PAD, PAD + LPAD - 5, PAD);
g2.drawString(start, LPAD - 20, h - (LPAD) - 20);
Long L = Math.round(MaxValue);
int MVi = Integer.valueOf(L.intValue());
String MVstring = String.valueOf(MVi);
int MVmid = MVi / 2;
String MVmidstring = String.valueOf(MVmid);
g2.drawString(MVmidstring, PAD, (h - PAD) / 2);
g2.drawString(MVstring, PAD, PAD);
g2.setColor(Color.red);
for (int j = 0; j < DataArray.length; j++) {
int x1 = x0 + (int) (j * xScale) + PAD;
double y1 = (int) ((MaxValue - DataArray[j]) * yScale + PAD) - 2;
g2.fillRect(x1 + 2, (int) y1 + 1 , w - (PAD * 42), h);
}
}
} catch (Exception e) {
}
}
repaint();
}
private int PAD=20;
私有intlpad=35;
私有int-DPAD=25;
图形2d g2=(图形2d)g;
g2.设置颜色(颜色为黑色);
字符串DataString[]=dataset.split(“,”);
double DataArray[]=新的双精度[DataString.length];
双最大值=0;
int w=getWidth();
inth=getHeight();
对于(int i=0;i最大值){
最大值=输出;
}
}捕获(数字格式){
}
}
双xScale=(w-1*(PAD+LPAD))/(DataArray.length)-1;
双Y刻度=(h-3*DPAD)/MaxValue;
//初始x,y(0)。
int x0=LPAD;
试一试{
如果(DataArray.length>1){
//作图
g2.拉线(PAD+LPAD,PAD,PAD+LPAD,h-(PAD+LPAD));
g2.绘制线(PAD+LPAD,h-PAD-LPAD,x0+(int)(DataArray.length*xScale),h-(PAD+LPAD));
颜色cd=新颜色(135、90、185);
g2.setPaint(cd);
g2.抽绳(标题,带4,填充-15);
g2.拉丝(xAxis,w/2-填充,h-(填充-10));
g2.旋转(数学托拉迪安(270));
g2.抽绳(yAxis,-(h/2+衬垫)-LPAD,衬垫-5);
g2.旋转(-Math.toRadians(270));
g2.setPaint(颜色为黑色);
double intin=double.parseDouble(间隔);
double sin=double.parseDouble(开始);
对于(int j=0;j
通常如何在x轴上定位杆
条形图的fillRect()
参数应为左
,顶
,宽
和高
。只关注垂直大小和位置,如图所示,可以使用以下比例将条形图高度缩放到绘图区域高度:
barHeightInPixels : plotHeightInPixels :: value : maxDataValue
求解barHeightInPixels
panelHeightInPixels = panel.getHeight();
plotHeightInPixels = panelHeightInPixels - axisOffset;
barHeightInPixels = value * plotHeightInPixels / maxDataValue;
现在使用缩放高度:
g2.fillRect(
barCenter - (barWidth / 2), //left
panelHeightInPixels - barHeightInPixels - axisOffset, //top
barWidth, //width
barHeightInPixels); //height
要了解其他功能是如何实现的,请研究图表库提供的代码,正如本节对您之前关于此主题的问题所建议的那样。您在过去48小时内没有问过同样的问题吗?我似乎记得我曾经给过这样的建议:为了更快地获得更好的帮助,发布一个or。使用逻辑一致的缩进代码行和代码块的形式。缩进的目的是使代码的流程更易于遵循!我只是想知道酒吧的位置。您通常如何在x轴上定位条形图?
如何将其固定,使其从x轴线开始。
-您使用基本数学。我们不知道你的变量是什么意思,所以你需要自己计算。您需要知道“X轴”线的“y偏移”值。然后你需要知道酒吧的高度。然后,不要在“X轴”线下方绘制矩形,而要在上面绘制矩形,因此“y值”等于“X轴”y偏移量减去条的高度。“这一次……”不要把你的个人经验误认为我通常与人交流的方式。你很特别(通过你自己的行动)。谢谢你,先生。你能分享一下fillRect的代码吗?因为我很难理解没有值的变量;如果您的片段来自paintComponent()
的实现,请不要递归调用repaint()
。非常感谢,先生。至少有人在提供有意义的答案:)另请参阅此相关的…………甜蜜!