我最近开始使用JFreeChart,我想做一些事情,但我不确定是否可能。我的程序应该从wav文件中绘制声谱图(声音图)。因此,我设法从双arraylist中的wav文件中获取数据,并将其显示在图表中。但现在我希望能够选择我的频谱图的一个区域(与相同的工具用于缩放)没有缩放,并能够播放我的声音上只选择的部分。但我根本找不到任何成功的方法。以下是我的图表代码:
package classes;
import java.awt.Color;
import java.awt.Paint;
import java.awt.Rectangle;
import java.io.File;
import java.io.IOException;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.Plot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import org.jfree.ui.RectangleInsets;
public class Chart{
JFreeChart chart;
Plot plot;
//Constructeur de la classe Chart
public Chart(double[][] bs, int channel, int framesLength, float frameRate)
{
// Création d'un XY chart
XYSeries series = new XYSeries("XYGraph");
int i=0,j=0;
float k=0;
//Ajout de tous les points du tableau de 16 bytes dans le chart
for( i=0; i <channel;i++)
{
for(j=0; j< framesLength;j++)
{
//Division des valeurs par 2^15 pour être entre 1 et -1
series.add(k, (bs[i][j]/32768));
//Echelle de X
k+=(1/frameRate);
}
}
// Ajoute la série au dataset
XYSeriesCollection dataset = new XYSeriesCollection();
dataset.addSeries(series);
// Génération du graphe
chart = ChartFactory.createXYLineChart(
"Ajouter titre à la fonction de génération", // Titre
"Temps (s)", // Nom de l'axe X
"y-axis", // Nom de l'axe Y
dataset, // Dataset
PlotOrientation.VERTICAL, // Plot Orientation
true, // Show Legend
false, // Use tooltips
false // Configure chart to generate URLs?
);
plot= (XYPlot) chart.getPlot();
}
//Renvoie le chart
public JFreeChart getChart()
{
return chart;
}
public void color(Color c)
{
plot.setBackgroundPaint(c);
}
}
Chart chartUn= new Chart(bs, channels , frameLength , frameRate);
chartUn.color(Color.pink);
vue.setChartPanelUn(new ChartPanel(chartUn.getChart(), false));
vue.getChartPanelUn().setRangeZoomable(false);
vue.getChartPanelUn().setMouseWheelEnabled(true);
getChartPanelun()返回一个图表面板。你能给我一个身份证吗?怎么解决我的问题?非常感谢(如果我的英语不总是准确的话,很抱歉:/)
不要通过缩放来执行此操作,而是使用添加到图表面板
的mouselistener
将标记
添加到域
轴。
在本例中,我对mouseadapter
进行了子类化,以便在按下鼠标时捕获域值(markerstart
),在释放鼠标时更新结束位置('Marker end'),并将标记添加到绘图中(updateMarker
)
然后您将得到如下所示的图表:
注意,在这个例子中,我实际上已经关闭了缩放。
import java.awt.Color;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import javax.swing.JFrame;
import javax.swing.JPanel;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.IntervalMarker;
import org.jfree.chart.plot.Marker;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import org.jfree.ui.Layer;
public class MouseMarkerDemo extends JFrame {
public MouseMarkerDemo(String title) {
super(title);
JPanel chartPanel = createDemoPanel();
chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
setContentPane(chartPanel);
}
private final static class MouseMarker extends MouseAdapter{
private Marker marker;
private Double markerStart = Double.NaN;
private Double markerEnd = Double.NaN;
private final XYPlot plot;
private final JFreeChart chart;
private final ChartPanel panel;
public MouseMarker(ChartPanel panel) {
this.panel = panel;
this.chart = panel.getChart();
this.plot = (XYPlot) chart.getPlot();
}
private void updateMarker(){
if (marker != null){
plot.removeDomainMarker(marker,Layer.BACKGROUND);
}
if (!( markerStart.isNaN() && markerEnd.isNaN())){
if ( markerEnd > markerStart){
marker = new IntervalMarker(markerStart, markerEnd);
marker.setPaint(new Color(0xDD, 0xFF, 0xDD, 0x80));
marker.setAlpha(0.5f);
plot.addDomainMarker(marker,Layer.BACKGROUND);
}
}
}
private Double getPosition(MouseEvent e){
Point2D p = panel.translateScreenToJava2D( e.getPoint());
Rectangle2D plotArea = panel.getScreenDataArea();
XYPlot plot = (XYPlot) chart.getPlot();
return plot.getDomainAxis().java2DToValue(p.getX(), plotArea, plot.getDomainAxisEdge());
}
@Override
public void mouseReleased(MouseEvent e) {
markerEnd = getPosition(e);
updateMarker();
}
@Override
public void mousePressed(MouseEvent e) {
markerStart = getPosition(e);
}
}
private static XYDataset createDataset() {
XYSeries series1 = new XYSeries("Data");
series1.add(1.0, 1.0);
series1.add(2.0, 4.0);
series1.add(3.0, 3.0);
series1.add(4.0, 5.0);
series1.add(5.0, 5.0);
series1.add(6.0, 7.0);
series1.add(7.0, 7.0);
series1.add(8.0, 8.0);
XYSeriesCollection dataset = new XYSeriesCollection();
dataset.addSeries(series1);
return dataset;
}
private static JFreeChart createChart(XYDataset dataset) {
JFreeChart chart = ChartFactory.createXYLineChart(
"Mouse Marker",
"X",
"Y",
dataset,
PlotOrientation.VERTICAL,
true,
true,
false
);
XYPlot plot = (XYPlot) chart.getPlot();
plot.setDomainPannable(true);
plot.setRangePannable(true);
XYLineAndShapeRenderer renderer
= (XYLineAndShapeRenderer) plot.getRenderer();
renderer.setBaseShapesVisible(true);
renderer.setBaseShapesFilled(true);
return chart;
}
public static JPanel createDemoPanel() {
final JFreeChart chart = createChart(createDataset());
final ChartPanel panel = new ChartPanel(chart);
panel.setRangeZoomable(false);
panel.setDomainZoomable(false);
panel.addMouseListener(new MouseMarker(panel));
return panel;
}
public static void main(String[] args) {
MouseMarkerDemo demo = new MouseMarkerDemo("JFreeChart: MouseMarkerDemo.java");
demo.pack();
demo.setVisible(true);
}
}
问题内容: 如何使用https://www.amcharts.com/demos/line-chart-with-scroll-and- zoom/ 这样的图表 我对这些功能特别感兴趣 为了能够使用这两个选择控件选择域轴窗口。 为了能够通过选择部分域轴进行缩放。 为了能够缩小并查看大图。 为了能够映射到范围轴(Y)并在任意点(无标记)像工具提示一样查看该气球上的值 我在这里尝试了可滚动的JFree
如何拥有像https://www.amcharts.com/demos/line-chart-with-scroll-and-zoom/这样的图表 null 我在这里做了初步尝试,可滚动JFree域轴和自定义标记标签,在垃圾上帝的帮助下,我使域可滚动。 我仍然缺少这些功能,以便能够有效地使用graph。
我使用Azure试用订阅,我尝试创建QnA Maker服务。我得到了上面的错误。我听说在西部、中西部或巴西地区不允许试用订阅。然而,我试图在东部或中部地区创建它,但仍然失败。详细错误如下所示 {"code":"DeploymentFail","消息":"至少有一个资源部署操作失败。有关详细信息,请列出部署操作。请参阅https://aka.ms/arm-debug了解使用详情。","详细信息":[
问题内容: 我目前正在使用JFreeChart显示框线图的基于Java的项目。 我的问题是如何显示包含带有大约20个类别和5个以上系列的CategoryDataset的箱形图的图表。 当前,如果未设置ChartPanel的首选大小,则图例,标签和注释可读取,但Boxplots太小。或设置ChartPanel的大小,以使Boxplots具有可接受的大小,然后将图例,标签和注释水平拉伸。 我的问题是,
29 放缩选项 视频支持下面的一些选项。 选项可以在ffmpeg工具集中采用-option value的形式进行设置,或者在aresample滤镜中以option=value形式设置,也可以通过libavutil/opt.h的API或明确设置在SwrContext选项中。 sws_flags 设置放缩标志。也用于设置放缩算法,仅有一个算法能被选中。 接受如下值: ‘fast_bilinear’ 快
问题内容: 我有一个JFreeChart时间序列图,其中显示了TimePeriodValuesCollection。数据集包含两个间隔。数据正确显示,我可以平移(按住Ctrl并拖动)视图。问题是,如果我放大并在缩放视图中向右平移视图,则第二个间隔在第一个间隔不再可见后突然消失。 如果只有一个时间间隔,或者我没有放大,一切都很好。 有什么想法吗? SSCCE: 问题答案: 可悲的是,我不知道为什么,