Charts: Bilah tidak merender atau menghilang saat dan setelah menyeret

Dibuat pada 13 Mar 2017  ·  30Komentar  ·  Sumber: danielgindi/Charts

Saya telah membuat diagram batang menggunakan BarChartView . Tampilan menampilkan jam kerja per hari.
Sayangnya, beberapa batang tidak ditampilkan sama sekali - dan yang lainnya menghilang saat seluruh bagan diseret.

Sebelum grafik ditampilkan pertama kali, itu diperbesar untuk hanya menampilkan 7 bar pada satu waktu:

barChart.zoom(scaleX:ceil(CGFloat(dataSet.xMax - dataSet.xMin) / 7), scaleY: 1, x: 0, y: 0)

Kemudian tampilan dianimasikan, sehingga hari terakhir ditampilkan lebih dulu:

barChart.moveViewToAnimated(xValue: dataSet.xMax, yValue: dataSet.yMin, axis: barChart.rightAxis.axisDependency, duration: 0.8, easingOption: .easeInOutSine)

Ini mengarah pada hasil berikut - sejauh ini, sangat bagus:

img_2071

Segera setelah saya menyeret grafik ke kanan, batang mulai menghilang - hanya nilainya yang tetap terlihat (perhatikan bilah Mo. 6 - hilang):

img_2072

Juga semua bilah yang lebih jauh ke kiri dan oleh karena itu tidak langsung terlihat (karena zoom) tidak ditampilkan sama sekali. Apa yang saya lakukan salah?

help wanted ★★

Komentar yang paling membantu

Saya memiliki masalah yang sama dengan 3.0.2 di CombinedChartView dengan batang bertumpuk BarChartData() .
Saat memperbesar dan menyeret entri data yang paling tepat di luar tampilan yang terlihat, bilah menghilang, label data ada di sana. Selanjutnya saya tidak membatasi .setVisibleXRangeMaximum() atau memindahkan sisi kiri melalui .moveViewToX() sama sekali.

Perilaku aneh lainnya adalah saya tidak dapat memilih semua bilah melalui .highlightPerTapEnabled() , hanya bilah tengah dalam satu set misalnya 13 yang dapat dipilih. Tidak yakin apakah ini terkait sama sekali.

dipecahkan: Masalahnya adalah bahwa entri data di mana dalam urutan terbalik. Mengurutkan entri data dengan meningkatkan nilai x memecahkan masalah.

Semua 30 komentar

Saya ingin Anda men-debug di sisi Anda terlebih dahulu.
Lihatlah fileprivate func prepareBuffer(dataSet: IBarChartDataSet, index: Int) , di mana ia menghitung barRect.
Harap debug sebelum dan sesudah zoom, apa yang dapat menyebabkan bilah hilang
Menunjukkan fakta bahwa beberapa bilah masih ada, dan posisi label tampak benar, bisa jadi itu adalah kesalahan sederhana oleh perpustakaan atau Anda.

Akan lebih mudah jika Anda dapat mereproduksinya dengan ChartsDemo

Saya dapat membuat kasus uji untuk masalah tersebut . Sayangnya saya tidak tahu, apa sebenarnya penyebabnya.

Untuk menjalankan kasus uji, gunakan target ChartsDemo di simulator iPhone 6 (10.2) dari Xcode 8.2.1 . Kemudian seret bagan ke kanan, Anda akan melihat bilah hijau Tue 7th menghilang.

Perlu diperhatikan: kode kasus uji didasarkan pada permintaan tarik ini untuk label bagan yang diatribusikan . Permintaan tarik menyediakan fungsionalitas yang membuat hari-hari di xAxis seperti yang akan Anda lihat di tangkapan layar. Namun, saya tidak dapat melihat mengapa permintaan tarik ini menyebabkan masalah.

Saya melakukan pemeriksaan cepat, palang yang hilang semuanya memenuhi kondisi istirahat:

            if (!viewPortHandler.isInBoundsLeft(barRect.origin.x + barRect.size.width))
            {
                continue
            }

            if (!viewPortHandler.isInBoundsRight(barRect.origin.x))
            {
                break
            }

Namun, saya tidak bisa menjelaskan apa penyebabnya. BarRect 'tampak' menghitung dengan benar

Terimakasih atas dukunganmu; Saya sangat menghargai itu!

Pikirkan lagi apakah permintaan tarik dapat menyebabkan masalah. Apa yang pasti berubah adalah cara label sumbu digambar, mungkin itu mempengaruhi lebar item sumbu, yang juga mempengaruhi barRect pada akhirnya?

Bagaimana kita bisa mempersempit jika masalahnya adalah karena a) bug di pull request b) bug di pustaka bagan atau c) penggunaan yang salah?

Terakhir kali saya cek, saya coba ganti library dengan master, sepertinya masih buggy. Anda dapat mengganti dan membantu pemeriksaan ulang.

viewPortHandler.isInBoundsRight tidak akan terpengaruh Saya kira, selama cabang fitur tidak mengubah kalkulasi barRect.

Untuk saat ini, saya tidak bisa mengatakan Anda salah menggunakannya, itu seperti masalah contentRect dan bar rect edge.

Saya minta maaf saya tidak punya banyak waktu untuk melihat ke tepi yang lurus untuk mencari tahu apa yang salah. Tetapi Anda dapat mencoba ChartsDemo untuk melakukan hal serupa untuk melihat apakah Anda dapat memperbanyaknya.

@danielgindi ada ide?

Ada berita tentang pull request atau masalah ini?

Apa pun? Bagaimana saya bisa membantu memperbaikinya?

@marbetschar Saya ingat terakhir kali saya menggunakan cabang master untuk bug ini, dan itu masih terjadi, jadi tidak harus berhubungan dengan PR Anda.

Namun saya tidak punya waktu untuk melihat matriksnya.

Saya pikir masalah utama di sini adalah mengapa itu di luar kondisi. Saya tidak melihat masalah yang jelas saat menghitung balok.

Jika Anda punya waktu, Anda bisa mulai melihat kalkulasi barRect.

Untuk lebih spesifik: Ketika bilah hilang, label di atasnya masih tetap pada posisi yang benar saya kira, jadi ini hanya tentang masalah tepi barRect.

Anda dapat mencoba menghapus

            if (!viewPortHandler.isInBoundsLeft(barRect.origin.x + barRect.size.width))
            {
                continue
            }

            if (!viewPortHandler.isInBoundsRight(barRect.origin.x))
            {
                break
            }

Dan lihat apakah bilah berada pada posisi yang tepat dan ukuran yang tepat, sehingga kami dapat memutuskan apakah ini hanya tentang masalah tepi.

@marbetschar Saya mengalami masalah yang sama persis, apakah Anda menemukan cara untuk mengatasinya?

@ jeffalee sayangnya saya belum punya waktu untuk

@marbetschar @jeffalee apakah masalah ini terkait dengan viewPortHandler?

Saya mengalami masalah yang sama dengan 3.0.2, atau mungkin masalahnya sama. Akan sangat menghargai bantuan dalam hal ini.

self.chartView.data = getChartData() // .count == 25
self.chartView.setVisibleXRangeMaximum(10) 
self.chartView.moveViewToX(20)

Hanya 10 bilah data terakhir yang dirender / ditampilkan saat saya menggulir ke kiri dan kanan.

  • Ketika bilah terakhir akan keluar dari batas, nilai batang memudar dan
  • Ketika yang terakhir di luar batas, semua palang yang ditarik menghilang.
  • Label xAxis tetap ada

Jika saya menghapus 2 baris terakhir, grafik ditampilkan dengan benar.

@perwyl Saya memiliki dua baris yang sama persis dalam kode saya; jadi saya akan mengklaim Anda mengalami masalah yang sama. @ liuxuan30 menyelidiki sedikit dan menemukan, bahwa ini memang terkait dengan viewPortHandler .

Sayangnya saya tidak punya waktu untuk menggali lebih dalam saat ini. Akan sangat berterima kasih jika Anda mencobanya.

@marbetsar baik-baik saja. Terima kasih atas konfirmasinya.

Saya memiliki masalah yang sama dengan 3.0.2 di CombinedChartView dengan batang bertumpuk BarChartData() .
Saat memperbesar dan menyeret entri data yang paling tepat di luar tampilan yang terlihat, bilah menghilang, label data ada di sana. Selanjutnya saya tidak membatasi .setVisibleXRangeMaximum() atau memindahkan sisi kiri melalui .moveViewToX() sama sekali.

Perilaku aneh lainnya adalah saya tidak dapat memilih semua bilah melalui .highlightPerTapEnabled() , hanya bilah tengah dalam satu set misalnya 13 yang dapat dipilih. Tidak yakin apakah ini terkait sama sekali.

dipecahkan: Masalahnya adalah bahwa entri data di mana dalam urutan terbalik. Mengurutkan entri data dengan meningkatkan nilai x memecahkan masalah.

@kscheff masalah apa yang Anda katakan terselesaikan? Milik Anda saja atau @marbetschar juga?

@ liuxuan30 Saya tidak dapat memverifikasi @marbetschar masalahnya. Saya hanya melihat bahwa saya memiliki masalah serupa dengan bilah yang hilang, yang dapat saya selesaikan dengan menyortir nilainya. Jadi saya sarankan untuk @marbetschar mencoba mengurutkan entri dalam kumpulan data.

Terima kasih, mengerti

@ksche bagaimana Anda menyelesaikannya

 Another strange behavior is that I cannot select all bars via .highlightPerTapEnabled(), only the center bar in a set of e.g. 13 is selectable. Not sure if this is related at all.

@perwyl masalah ini menghilang dengan penyortiran juga.

@ksche terima kasih! saya benar-benar perlu melakukan return yVals.reversed() tidak yakin apa logika di balik ini.

Bagus sekali bahwa pengurutan data membuat bagan dipetakan dengan benar saat diperbesar. Dapatkah tindakan pengurutan disertakan dalam pod secara default di metode "notifyDataSetChanged" atau mungkin di tempat lain? Haruskah saya membuat PR?

Silakan membuat PR dengan detail seperti apa masalah dan akar penyebabnya, dll. Ini telah menjadi pembicaraan dan waktu yang cukup lama, tidak yakin apakah mereka memiliki masalah yang sama dengan posting ini.

Saya pikir jika kita akan melakukan ini (dan saya pikir kita harus melakukannya), satu-satunya cara untuk menambahkan data harus dengan cara yang teratur.

penyortiran atau masalah ini? Penyortiran dulu dilakukan oleh pengguna yang saya ingat.

penyortiran atau masalah ini? Penyortiran dulu dilakukan oleh pengguna yang saya ingat.

seperti yang saya lihat itu menyebabkan representasi data yang salah dalam bagan - jadi tampaknya tidak jelas untuk menyiapkan data yang diurutkan (memiliki nilai x - jadi itu menentukan kondisi yang diperlukan dan cukup untuk menggambar dengan benar). Jadi mungkinkah pod harus mandiri dan tidak memerlukan persyaratan yang tidak jelas? Menurut opini saya
Saya akan mempersiapkan PR dalam beberapa hari, semoga logika ini jelas.

Padahal saya hanya bekerja dengan diagram batang. Mungkin beberapa jenis bagan dapat terpengaruh. Tapi sungguh saya tidak mengerti bagaimana itu bisa menggambar dengan benar terlebih dahulu dan memiliki masalah dengan menggambar bagian grafik yang diperbesar dari perspektif logis.

@ liuxuan30 Pemahaman saya adalah bahwa masalah ini disebabkan oleh data yang tidak disortir. Apakah saya melewatkan sesuatu?

Saya menebak di sini, tetapi jika data selalu diurutkan, kemungkinan besar kita juga dapat membuat asumsi dalam rendering untuk meningkatkan kinerja.

Jujur saya tidak ingat. Terakhir kali saya melihat ke dalam adalah saya ditemukan

if (!viewPortHandler.isInBoundsLeft(barRect.origin.x + barRect.size.width))
            {
                continue
            }

            if (!viewPortHandler.isInBoundsRight(barRect.origin.x))
            {
                break
            }

salah satu dari dua kondisi tersebut tidak terpenuhi sehingga bilah tidak merender. @marbetschar tidak diperbarui sejak saat itu, jadi saya tidak yakin apakah akar penyebab masalah asli terkait dengan penyortiran, seperti yang ditawarkan @kscheff .

Hai teman-teman! Ada berita tentang masalah ini? Menggunakan versi 3.3.0 dan masih masalah yang sama dengan BarChartView. Adakah ide bagaimana memperbaikinya jika penting untuk tidak mengurutkan nilai yAxis?

Apakah halaman ini membantu?
0 / 5 - 0 peringkat