<p>Grafik 3.0 tidak dapat menggambar grafik garis terputus-putus</p>

Dibuat pada 21 Nov 2016  ·  25Komentar  ·  Sumber: danielgindi/Charts

Saya harus bisa menggambar bagan yang tidak lengkap. Artinya, sumbu x lengkap tetapi sumbu y setengah lengkap.

Di versi sebelumnya, saya hanya perlu menambahkan label ke sumbu x, yang akan membuat sumbu x penuh.

Kemudian saya perlu menambahkan nilai y setengah lengkap ke bagan, lalu bagan akan membuat nilai y setengah lengkap tetapi masih sumbu x penuh. Saya tidak melihat cara untuk melakukan ini di 3.0 karena menggunakan nilai nil sebagai ganti y tidak diperbolehkan karena mengharapkan nilai ganda:

for (int i = 0; i < pricesArray.count; i++){
  double price = pricesArray[i][@"price"];
  [chartValues addObject:[[ChartDataEntry alloc] initWithX:i y:price]];
}

Saya perlu menambahkan titik data x dengan nilai y nihil. Mohon saran.

Komentar yang paling membantu

@CAPIStkidd bagaimana cara membuat entri kosong? Membuat ChartDataEntry sepertinya memaksa Anda untuk memberikan nilai ganda, yang memang menggambar bagan yang tidak lengkap seperti yang saya inginkan tetapi itu mengacaukan skala sumbu y jika saya misalnya memberikan entri kosong semua nilai 0.

Semua 25 komentar

Saya juga punya masalah ini.

Ini adalah efek samping dari bagaimana perpustakaan mengubah cara melakukan pelabelan.

Solusi untuk saat ini adalah membuat kumpulan data kedua dengan entri kosong (jadi jika Anda menginginkan 100 entri dan hanya 75 yang diambil, buat kumpulan data kedua dengan 25 entri, bernomor 75-99) dan tambahkan juga.

@CAPIStkidd bagaimana cara membuat entri kosong? Membuat ChartDataEntry sepertinya memaksa Anda untuk memberikan nilai ganda, yang memang menggambar bagan yang tidak lengkap seperti yang saya inginkan tetapi itu mengacaukan skala sumbu y jika saya misalnya memberikan entri kosong semua nilai 0.

@ edalford11 Anda dapat menggunakan beberapa set data untuk mensimulasikan garis putus. Di Bagan 3.0, Anda dapat menentukan nilai x secara langsung, bukan mengindeks lagi, jadi itu akan baik-baik saja.
Saya dulu menerapkan pemutusan baris di Bagan 2.x, namun di Bagan 3.0, saya pikir menggunakan beberapa kumpulan data lebih baik?

@ liuxuan30 Saya pikir Anda salah mengartikan pertanyaan terakhir saya. Menggunakan beberapa kumpulan data memang berfungsi untuk memutus garis, tetapi itu mengacaukan skala sumbu y karena pustaka memaksa Anda untuk memasukkan nilai numerik untuk nilai y, yang mengacaukan bagan secara keseluruhan. Jika ChartDataEntry mengizinkan Anda memasukkan nilai y KOSONG, maka pendekatan ini akan berhasil. Seperti yang saya lihat sekarang, versi 3.0 telah melarang grafik pemecah garis karena hal ini.

Saya memiliki masalah yang sama di sini. Tidak tahu mengapa masalah ini ditutup.

@edalford11 maksudmu versi 2.x dapat mendukung pemutusan baris dengan menggunakan beberapa kumpulan data? Saya belum mencobanya, tetapi dari pemahaman saya, semua kumpulan data berbagi sumbu x dan sumbu y yang sama, sehingga xMin, xMax, yMin, yMax tidak boleh terpengaruh atau kacau.

Katakanlah saya ingin memecah satu baris (1,1) -> (10,10) menjadi dua seperti: (1,1) -> (2,5), (3,6) -> (10,10)
Jadi kumpulan data A:(1,1),(2,5); dan kumpulan data B: (3,6), (10,10). Bagan 3.0 harus menangani dua set ini dan menggambar garis masing-masing pada sumbu x kira-kira [1,6], sumbu y [1,10]. Saya tidak melihatnya mengacaukan skala sumbu y atau nilai min/maks.

Apakah saya salah paham, atau bagan garis terputus Anda bukan yang saya maksud 'garis putus-putus'?

Bagan garis terputus yang kami maksud bukanlah 'garis putus-putus'. Artinya ada beberapa data yang memiliki nilai sumbu x, tetapi nilai sumbu y adalah nihil. Kita bisa melakukannya di Bagan 2.0. tetapi tidak dapat melakukannya di Bagan 3.0.
Misalnya ada 12 bulan di sumbu x, hanya 2 yang memiliki nilai sumbu y, yang lain nihil. Saya ingin menggambar grafik 12 bulan, bukan grafik 2 bulan. Bagaimana cara melakukannya ?

@lightwindy mungkin https://github.com/danielgindi/Charts/issues/280

Bagaimana Anda melakukannya di Bagan 2.0? Mengganti penyaji bagan garis atau beberapa kumpulan data? Seperti yang saya katakan di atas, kita dapat menggunakan dua kumpulan data untuk mensimulasikan kesenjangan antara dua garis. Ini rumit saya akui. Mengganti penyaji bagan garis lebih sulit, tetapi juga fleksibel.

Pada grafik 3.0, ya, sekarang setiap entri membutuhkan x dan y, yang berarti lompatan tidak mungkin untuk saat ini.

Pada Bagan 2.0, kita dapat memberikan nilai sumbu x dan nilai sumbu y masing-masing. Pertama, kita dapat memberikan nilai sumbu x dan memformatnya. Kemudian berikan nilai sumbu y yang berisi (nilai y & indeks x).
Lihat berikut:

  1. xVals.append(Data yang Diformat)
  2. yVals.append(ChartDataEntry(nilai: Double, xIndex: Int))
  3. LineChartDataSet(yVals: yVals)
  4. LineChartData(xVals: xVals, kumpulan data: kumpulan data)

@ liuxuan30 Katakanlah Anda memiliki LineChartDataSet, yang merupakan set yang Anda inginkan untuk terlihat di bagan. Solusi yang Anda sarankan adalah membuat LineChartDataSet kedua, yang akan berfungsi sebagai rangkaian garis tak terlihat yang membuat bagan garis terlihat terputus-putus. Ini berfungsi tetapi masalahnya adalah katakanlah LineChartDataSet pertama memiliki rentang nilai ay 300 hingga 400. Kami dipaksa untuk memberikan nilai y LineChartDataSet kedua. Jika kita memberikannya katakan semua 0, kisaran sumbu y sekarang menjadi 0-400, yang TIDAK mengacaukan skala sumbu y dan grafik akhirnya menggambar dengan cara yang sangat tidak terperinci. LineChartDataSet kedua harus memiliki nilai y KOSONG sehingga bagan tidak mengubah skala berdasarkan nilai y tersebut. Ini mudah dilakukan di 2.0.

Solusi sementara saya adalah memastikan LineChartDataSet yang tidak terlihat memiliki nilai y yang berada di suatu tempat di tengah kisaran LineChartDataSet pertama dan mengatur lineWidth ke 0 sehingga tidak menarik, yang menjaga skala sumbu y tetap normal. Meskipun ini berhasil, ini bukan solusi yang ideal jadi saya membayangkan kita ingin kembali ke lebih banyak solusi yang dimiliki 2.0 untuk bagan garis terputus-putus.

@edalford11 Saya pikir Anda salah paham.
Yang saya sebutkan adalah, setiap kumpulan data yang Anda buat dapat dilihat;
katakanlah kita memiliki dua garis, yang terputus-putus:
Baris pertama menghubungkan (0,1) ke (2,3)
Baris kedua menghubungkan (4,4) ke (7, 6).

Seperti yang Anda lihat, (2,3) dan (4,4) memiliki celah.

Berikut ini contohnya:
dl
Saya baru saja menetapkan nilai x yang berbeda untuk set 1 dan set 2:

    for (int i = 0; i < count; i++)
    {
        if (i < count / 2) {
            double val = arc4random_uniform(range) + 3;
            [values addObject:[[ChartDataEntry alloc] initWithX:i y:val]];
        } else {
            double val = arc4random_uniform(range) + 3;
            [values2 addObject:[[ChartDataEntry alloc] initWithX:i+5 y:val]];
        }
    }

Saya melakukan trik kotor untuk membuat celah +5 (setelah celah pertama, tidak ada lagi celah karena titik terhubung).
Trik dua set ini membuat garis terputus-putus memiliki satu cacat: animasi x, jadi jika Anda membutuhkan animasi x, itu akan memiliki dua garis yang ditarik secara bersamaan.

Saya dulu mengganti penyaji bagan garis untuk mendukung fitur ini di Bagan 2.0, namun, ada kesulitan saat mempertimbangkan untuk mengisi rect. Saya pikir ini adalah solusi yang lebih baik, tetapi juga fitur yang sulit untuk diterapkan.

Anda dapat melihat https://github.com/danielgindi/Charts/issues/280 , di situlah kami biasa membicarakan hal ini. Seseorang mengajukan PR, namun karena alasan tertentu ditutup oleh penulis.
@danielgindi menyarankan untuk menggunakan beberapa kumpulan data cara untuk melakukannya. Tapi saya kira dia lupa animasi x.
Tetap saja, saya rasa ini adalah fitur yang bagus untuk dimiliki dengan tidak menggunakan banyak kumpulan data

Tentang animasi x, saya baru saja membuat perbaikan cepat: menimpa animator, untuk menggambar kumpulan data secara berurutan.

@ liuxuan30 itu masuk akal tetapi yang saya coba lakukan adalah tidak memiliki data tambahan yang terlihat sehingga trik ini tidak benar-benar berfungsi. Dalam contoh Anda, kumpulan data kedua harus benar-benar tidak terlihat sambil menjaga panjang sumbu x yang sama, itulah sebabnya saya mengatakan kita membutuhkan kemampuan untuk menambahkan nilai y sehingga sumbu y mengabaikan nilai saat penskalaan.

Saya agak tersesat di sini .. Anda tidak ingin garis kedua terlihat tetapi tetap pada sumbu x min/maks yang sama? Sepertinya tidak seperti garis putus-putus..

Mengapa tidak menetapkan nilai maks sumbu menjadi nilai besar, seperti 2x dari nilai maks entri Anda? Jadi Anda memiliki banyak ruang setelah baris Anda?

Tangkapan layar dapat membantu saya memahami.

Label sumbu x terdiri dari cap waktu. Ini adalah grafik saham, yang menunjukkan sumbu x dari pembukaan pasar (9:30) hingga penutupan pasar (16:00). Nilai y memanjang sepanjang sumbu x seiring berjalannya hari. Dengan demikian garis tidak akan selesai pada grafik sampai 4:00 sore.

Saya pikir Anda mengerti persis bagaimana bagan harus dibangun pada saat ini. Anda menyebutkan pengaturan nilai maks pada sumbu x. Bisakah Anda menjelaskan bagaimana Anda melakukannya? Kita dipaksa untuk membuat objek ChartDataEntry untuk membangun sumbu x dan y. Saya tidak melihat bagaimana bagan akan cukup pintar untuk menampilkan bagan semacam ini hanya dengan menetapkan nilai maksimal pada sumbu x.

'grafik saham' menjelaskan apa yang Anda butuhkan. Yang akan saya coba adalah ini:
1 set xAxis max seperti nilai 4:00 sore
2 tambahkan entri seperti yang saya lakukan di atas, misalnya

    _chartView.xAxis.axisMaximum = 8;
    for (int i = 0; i < 8; i++)
    {
        if (i < 8 / 2) {
            double val = arc4random_uniform(range) + 3;
            [values addObject:[[ChartDataEntry alloc] initWithX:i y:val]];
        }
    }

Saya baru saja membuat tweak cepat di ChartsDemo, sepertinya (memiliki animasi yang lambat, yang saya belum tahu mengapa):
image

Bisakah ini menyelesaikan masalah Anda?

Idenya adalah ketika Anda mendapatkan data baru, Anda hanya memperbarui atau membuat data baru dan mengaturnya lagi, sehingga akan 'bertumbuh' hingga jam 4:00 sore

Contoh Anda, Anda mengatur label sumbu ke angka. Saya tidak melihat bagaimana ini akan bekerja ketika label sumbu x adalah nilai string. axisMaximum hanya menerima nilai ganda.

itu hanya sebuah karya bagaimana mendapatkan efek visual untuk 'garis terputus-putus'. Karena x adalah double dan kita menggunakan valueFormatter , kita dapat memetakan [xMin, xMax] ke [9:00am, 4:00pm] bukan? Memformat adalah topik lain

Apakah ada yang berubah sejak utas ini ditutup? Apakah Bagan versi terbaru mendukung celah dalam kumpulan data?

@edalford11 Eric, apakah Anda pernah menemukan cara untuk melakukan ini?

@JCMcLovin Saya dapat mencapai ini dengan membuat 2 objek LineChartDataSet .

LineChartDataSet *set1 = [[LineChartDataSet alloc] initWithValues:chartValues label:@"Price"];
LineChartDataSet *set2 = [[LineChartDataSet alloc] initWithValues:emptyChartValues label:nil];

Dimana chartValues dan emptyChartValues adalah array dari objek ChartDataEntry . Saat menambahkan kedua set ke array bernama dataSets (urutan penting untuk dataset mana yang ditampilkan terlebih dahulu), mereka dapat ditambahkan ke bagan seperti itu.

LineChartData *data = [[LineChartData alloc] initWithDataSets:dataSets];

Ini menampilkan grafik terputus-putus seperti yang saya inginkan.

Saya tahu saya tahu obj-c kotor.

@edalford11 Terima kasih, Eric. Kurasa aku harus mencobanya.

Juga, 👍 tentang ini:

Saya tahu saya tahu obj-c kotor.

Hai. Saya harap pesan saya menemukan Anda semua dengan baik di tengah krisis global ini.

Saya menggunakan versi terbaru dari pustaka bagan untuk memplot bagan garis.

Grafik saya menunjukkan bulan hingga 21 Februari. Saya tidak ingin menampilkan nilai 'nol' untuk semua bulan mendatang . Ini harus kosong. Itu yang ingin saya capai.

Saya akan membutuhkan sedikit panduan tentang cara membuatnya.

Screen Shot 2020-04-02 at 9 41 51 AM

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

kwstasna picture kwstasna  ·  3Komentar

BrandonShega picture BrandonShega  ·  4Komentar

guoyutaog picture guoyutaog  ·  3Komentar

valeIT picture valeIT  ·  3Komentar

brytnvmg picture brytnvmg  ·  4Komentar