Rumah Java javaTutorial Bagaimanakah cara saya memutarkan satah koordinat dan label paksi-y dalam Java untuk visualisasi data?

Bagaimanakah cara saya memutarkan satah koordinat dan label paksi-y dalam Java untuk visualisasi data?

Nov 06, 2024 am 04:21 AM

How do I rotate the coordinate plane and y-axis labels in Java for data visualization?

Memutar Satah Koordinat untuk Data dan Teks dalam Java

Isu ini menangani cabaran dalam memplot titik data dan memusingkan label pada paksi-y daripada plot data. Kod yang disediakan mentakrifkan struktur asas untuk memplot data dan label, tetapi ia menghadapi dua kesukaran:

  • Titik data diplot dengan salah disebabkan oleh orientasi asal dan paksi-y.
  • Y- label paksi tidak kelihatan pada skrin.

Menyelesaikan Isu

Untuk menangani isu ini, mari fokus pada pengubahsuaian berikut:

1. Memutar Satah Koordinat

Kita boleh memutar satah koordinat untuk menjajarkan dengan asal baharu (sudut kiri bawah segi empat tepat biru) dan terbalikkan paksi-y menggunakan kod berikut:

<code class="java">g2d.translate(leftStartPlotWindow, blueTop);//translate origin to bottom-left corner of blue rectangle
g2d.scale(1, -1);//invert the y-axis</code>
Salin selepas log masuk

2. Memplot Data

Kami melaraskan data agar sesuai dengan satah koordinat yang diputar dengan mendarabnya dengan skalar:

<code class="java">double Scalar = blueWidth/maxPlot;
ArrayList<Double> scaledDiffs = new ArrayList<>();
for(int e = 0;e<myDiffs.size();e++){scaledDiffs.add(myDiffs.get(e)*Scalar);}</code>
Salin selepas log masuk

3. Teks Memutar untuk Label Y-Axis

Untuk memutar label pada paksi-y, kami menggunakan kod berikut:

<code class="java">g2d.rotate(Math.toRadians(-90), 0, 0);//rotate text 90 degrees counter-clockwise
g.drawString(yString, -(height/2)-(yStrWidth/2), yStrHeight);
g2d.rotate(Math.toRadians(+90), 0, 0);//rotate text 90 degrees clockwise</code>
Salin selepas log masuk

Kod Lengkap

Kod yang diubah suai dengan pelarasan ini harus menyelesaikan isu:

DataGUI.java

<code class="java">//... Previous code omitted for brevity
import java.awt.geom.AffineTransform;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.ArrayList;
import java.util.List;

class DataGUI extends JFrame{
//... Previous code omitted for brevity

    @Override
    public void paint(Graphics g) {
        // ... Previous code omitted for brevity
        int height = getHeight();
        int width = getWidth();
        ins = getInsets();

        // Obtain data about graphics environment and text
        Graphics2D g2d = (Graphics2D) g;
        FontMetrics fontMetrics = g2d.getFontMetrics();
        String xString = "x-axis Label";
        int xStrWidth = fontMetrics.stringWidth(xString);
        int xStrHeight = fontMetrics.getHeight();

        // Set parameters for the inner rectangle
        int hPad = 10;
        int vPad = 6;
        int testLeftStartPlotWindow = ins.left + 5 + (3 * yStrHeight);
        int testInnerWidth = width - testLeftStartPlotWindow - ins.right - hPad;

        // Find minimum and maximum values
        getMaxMinDiffs();
        getMaxPlotVal();

        // Determine the maximum number of ticks for the axes
        double increment = 5.0;
        int numTicks = (int) (maxPlot / increment);
        int remainder = testInnerWidth % numTicks;
        int leftStartPlotWindow = testLeftStartPlotWindow - remainder;

        // Calculate the bottom padding and blue rectangle dimensions
        int bottomPad = (3 * xStrHeight) - vPad;
        int blueTop = ins.bottom + (vPad / 2) + titleStrHeight;
        int blueHeight = height - bottomPad - blueTop;
        int blueWidth = blueHeight;
        int blueBottom = blueHeight + blueTop;

        // Start drawing
        // ... Previous code omitted for brevity

        // Scale the diffs to fit the window
        double Scalar = blueWidth / maxPlot;
        List<Double> scaledDiffs = new ArrayList<>();
        for (Double myDiff : myDiffs) {
            scaledDiffs.add(myDiff * Scalar);
        }

        // Rotate the graphics context for plotting data
        AffineTransform at = g2d.getTransform();
        g2d.translate(leftStartPlotWindow, blueTop);
        g2d.scale(1, -1);

        // Plot the scaled diffs
        for (int w = 0; w < scaledDiffs.size(); w++) {
            if (w > 0) {
                double prior = scaledDiffs.get(w - 1);
                int priorInt = (int) prior;
                double current = scaledDiffs.get(w);
                int currentInt = (int) current;
                g2d.drawOval(priorInt, currentInt, 4, 4);
            }
        }

        // Restore the transform for conventional rendering
        g2d.setTransform(at);
        // ... Rest of the code omitted for brevity
    }

    // ... Previous code omitted for brevity
}</code>
Salin selepas log masuk

DataPanel.java

<code class="java">//... Previous code omitted for brevity

@Override
protected void paintComponent(Graphics g) {
//... Previous code omitted for brevity

int blueTop = ins.bottom+(vPad/2)+titleStrHeight;
int blueHeight = height-bottomPad-blueTop;
int blueWidth = blueHeight;
int blueBottom = blueHeight+blueTop;

//... Previous code omitted for brevity

// Rotate the graphics context for y-axis labels
g2d.rotate(Math.toRadians(-90), 0, 0);
g.drawString(yString, -(height/2)-(yStrWidth/2), yStrHeight);

// Restore the graphics context for normal rendering
g2d.rotate(Math.toRadians(+90), 0, 0);

//... Previous code omitted for brevity
}</code>
Salin selepas log masuk

Sumber Tambahan

Untuk maklumat lanjut tentang transformasi grafik, rujuk:

  • [Grafik 2D Java](https:// docs.oracle.com/javase/8/docs/technotes/guides/2d/index.html)

Atas ialah kandungan terperinci Bagaimanakah cara saya memutarkan satah koordinat dan label paksi-y dalam Java untuk visualisasi data?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Rangka Kerja 4 JavaScript teratas pada tahun 2025: React, Angular, Vue, Svelte Rangka Kerja 4 JavaScript teratas pada tahun 2025: React, Angular, Vue, Svelte Mar 07, 2025 pm 06:09 PM

Rangka Kerja 4 JavaScript teratas pada tahun 2025: React, Angular, Vue, Svelte

Bagaimanakah saya melaksanakan caching pelbagai peringkat dalam aplikasi java menggunakan perpustakaan seperti kafein atau cache jambu? Bagaimanakah saya melaksanakan caching pelbagai peringkat dalam aplikasi java menggunakan perpustakaan seperti kafein atau cache jambu? Mar 17, 2025 pm 05:44 PM

Bagaimanakah saya melaksanakan caching pelbagai peringkat dalam aplikasi java menggunakan perpustakaan seperti kafein atau cache jambu?

Bagaimanakah mekanisme kelas muatan Java berfungsi, termasuk kelas yang berbeza dan model delegasi mereka? Bagaimanakah mekanisme kelas muatan Java berfungsi, termasuk kelas yang berbeza dan model delegasi mereka? Mar 17, 2025 pm 05:35 PM

Bagaimanakah mekanisme kelas muatan Java berfungsi, termasuk kelas yang berbeza dan model delegasi mereka?

Node.js 20: Peningkatan Prestasi Utama dan Ciri -ciri Baru Node.js 20: Peningkatan Prestasi Utama dan Ciri -ciri Baru Mar 07, 2025 pm 06:12 PM

Node.js 20: Peningkatan Prestasi Utama dan Ciri -ciri Baru

Iceberg: Masa Depan Jadual Data Tasik Iceberg: Masa Depan Jadual Data Tasik Mar 07, 2025 pm 06:31 PM

Iceberg: Masa Depan Jadual Data Tasik

Spring Boot Snakeyaml 2.0 CVE-2022-1471 Isu Tetap Spring Boot Snakeyaml 2.0 CVE-2022-1471 Isu Tetap Mar 07, 2025 pm 05:52 PM

Spring Boot Snakeyaml 2.0 CVE-2022-1471 Isu Tetap

Bagaimanakah saya boleh menggunakan JPA (Java Constence API) untuk pemetaan objek-objek dengan ciri-ciri canggih seperti caching dan malas malas? Bagaimanakah saya boleh menggunakan JPA (Java Constence API) untuk pemetaan objek-objek dengan ciri-ciri canggih seperti caching dan malas malas? Mar 17, 2025 pm 05:43 PM

Bagaimanakah saya boleh menggunakan JPA (Java Constence API) untuk pemetaan objek-objek dengan ciri-ciri canggih seperti caching dan malas malas?

Bagaimanakah saya menggunakan Maven atau Gradle untuk Pengurusan Projek Java Lanjutan, Membina Automasi, dan Resolusi Ketergantungan? Bagaimanakah saya menggunakan Maven atau Gradle untuk Pengurusan Projek Java Lanjutan, Membina Automasi, dan Resolusi Ketergantungan? Mar 17, 2025 pm 05:46 PM

Bagaimanakah saya menggunakan Maven atau Gradle untuk Pengurusan Projek Java Lanjutan, Membina Automasi, dan Resolusi Ketergantungan?

See all articles