我正在使用biojava来创建色谱图。
色谱图为图像。每个基调用都保存在一个矩形中。
获取 x 坐标(左侧(:gfx.getCallboxBounds(int i(.getX((;
要获取宽度: gfx.getCallboxBounds(int i(.getX((
其中,整数 i 表示构建色谱图的矩形排列中的矩形。
要获取给定碱基的置信度值,请执行以下操作:
(我创建了一个名为信心的数组(信心[i - 1];
我在哪里,再次,有问题的基地。
报告的置信度值介于 1 和 70 之间。图像的高度为 240 像素。
我想在序列的相对高度打印 2 像素厚的灰色线条,用于每个基调用的宽度。
例如,如果 basecall(矩形(60 的质量为 40,宽度为 20,则将在其宽度为 137 像素 (40/70 * 240( 处绘制一条灰线。
下面是绘制跟踪的方法:
ChromatogramFactory chromFactory = new ChromatogramFactory();
Chromatogram chrom = ChromatogramFactory.create(abi);
ChromatogramGraphic gfx = new ChromatogramGraphic(chrom);
BufferedImage bi = new BufferedImage(
gfx.getWidth(),
gfx.getHeight(),
BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = bi.createGraphics();
g2.setBackground(Color.white);
g2.clearRect(0, 0, bi.getWidth(), bi.getHeight());
if (g2.getClip() == null) {
g2.setClip(new Rectangle(0, 0, bi.getWidth(), bi.getHeight()));
}
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
gfx.drawTo(g2);
g2.draw(new java.awt.Rectangle(-10, -10, 5, 5));
编辑:此外,序列长度与矩形的数量相同。序列中的每个字母表示一个基调用,每个矩形也是如此。
使用下面的代码,我能够在相对位置添加行以给出置信度值:
int leftBound = 0;
int rightBound = 0;
double confVal = 0;
double heightDouble = 0;
int height = 0;
g2.setColor(Color.LIGHT_GRAY);
for (int i = 0; i < gfx.getCallboxCount(); i++) {
leftBound = (int) gfx.getCallboxBounds(i).getX();
rightBound = (int) ((int) leftBound + gfx.getCallboxBounds(i).getWidth());
confVal = confidence[i] * 2.67;
heightDouble = 200 - confVal;
height = (int) heightDouble;
g2.drawLine(leftBound, height, rightBound, height);
}