Charts: <error>: CGAffineTransformInvert: matriks tunggal</error>

Dibuat pada 5 Mar 2016  ·  35Komentar  ·  Sumber: danielgindi/Charts

Saya mendapatkan kesalahan ini berulang kali dengan HorizontalBarChartView:
<Error>: CGAffineTransformInvert: singular matrix.

Tidak ada yang istimewa tentang kode saya. Saya menggunakan HorizontalBarChartView di OSX dengan ukuran 175x394 poin. Itu tidak terhalang oleh pandangan lain. Saya menginisialisasi grafik dengan:

<strong i="9">@IBOutlet</strong> weak var horizontalBarChart: HorizontalBarChartView!
let data = BarChartData(xVals: [1.0, 3.0, 5.0, 7.0, 8.0])
horizontalBarChart.data = data
horizontalBarChart.notifyDataSetChanged()

dan kemudian terkena kesalahan beberapa kali dalam satu detik. Tahu apa yang menyebabkan ini?

Baris 206 di ChartTransformer adalah satu-satunya tempat CGAffineTransformInvert dipanggil.

bug

Komentar yang paling membantu

Ini tidak selalu mengatasi masalah yang mendasarinya, tetapi pemeriksaan singularitas matriks menghindari pesan kesalahan. Saya mengganti pixelToValueMatrix di ChartTransformer dengan ini untuk menekan kesalahan.

public var pixelToValueMatrix: CGAffineTransform
{
  guard valueToPixelMatrix.a*valueToPixelMatrix.d-valueToPixelMatrix.b*valueToPixelMatrix.c != 0 else {
    // Matrix is singular, return the matrix itself
    return valueToPixelMatrix
  }
  return CGAffineTransformInvert(valueToPixelMatrix)
}

Semua 35 komentar

Ini tidak selalu mengatasi masalah yang mendasarinya, tetapi pemeriksaan singularitas matriks menghindari pesan kesalahan. Saya mengganti pixelToValueMatrix di ChartTransformer dengan ini untuk menekan kesalahan.

public var pixelToValueMatrix: CGAffineTransform
{
  guard valueToPixelMatrix.a*valueToPixelMatrix.d-valueToPixelMatrix.b*valueToPixelMatrix.c != 0 else {
    // Matrix is singular, return the matrix itself
    return valueToPixelMatrix
  }
  return CGAffineTransformInvert(valueToPixelMatrix)
}

Nah, kita perlu memeriksa nilai matriks, mengapa itu tunggal, itu biasanya datanya memiliki beberapa masalah dan menyebabkan perhitungan matriks menjadi buruk.
Anda dapat mencetak chartXMin, deltaX, deltaY, chartYMin, dan _viewPortHandler.contentRect), dan nilai _matrixValueToPx.
juga mencetak getTransformer(.Left) atau getTransformer(.Right) tergantung pada sumbu y yang Anda gunakan.
Jika memungkinkan, gunakan data Anda dan ChartsDemo untuk mereproduksinya

Saya perhatikan label sumbu X saya tidak muncul. Mungkin itu masalahnya?

tidak bisa mengatakan dengan pasti sekarang. Perlu Anda men-debug untuk melihat apa yang terjadi. Anda juga dapat mencoba ChartsDemo.

Anda memiliki transformator dengan matriks tunggal, mungkin untuk sumbu X. Ini berarti ada sesuatu yang salah dengan penyiapan Anda ...
Tetapi karena Anda belum menjawab @ liuxuan30 sejak Maret, saya rasa Anda sudah menemukan

Tidak, seperti yang saya katakan, ini adalah HorizontalBarChartView sederhana dan saya yakin kesalahan dapat direproduksi. Anda masih memiliki bug dalam kode Anda, tetapi saya tidak punya waktu untuk membantu Anda memperbaikinya dan saya menemukan solusi bantuan pita.

Menutup masalah tidak memperbaiki bug, tetapi mungkin suatu hari orang lain akan menggunakan Framework ini dan membukanya kembali ketika mereka mulai dibombardir dengan pesan kesalahan.

@ serk1 yah, itu bukan sikap yang positif ... Kami menutup masalah yang tidak ditanggapi orang untuk waktu yang lama - dan @ liuxuan30 di sini mencoba membantu Anda.
Seperti yang saya katakan - satu-satunya kasus di mana pesan itu akan dimuntahkan - adalah ketika xAxis Anda tidak valid, dan Anda bahkan seharusnya tidak melihat label xAxis.
Jika Anda adalah pengguna pustaka ini, dan ingin mendapatkan pengalaman yang lebih baik, Anda dapat membantu memperbaiki bug ini.

Demo OSX tidak ditargetkan untuk perangkat iOS. Periksa kembali konfigurasi Anda.

@danielgindi Saya melihat pernyataan itu lagi, saya menemukan @ serk1 hanya memberi makan barChartData hanya dengan nilai x, tidak ada kumpulan data sama sekali.
Menggunakan ChartsDemo juga dapat mencetak pesan kesalahan yang sama, dan saya hanya dapat melihat label sumbu y default (0-1), tanpa nilai sumbu x.

Saya melihat kodenya, ternyata di calcMinMax () BarChartView:

// increase deltax by 1 because the bars have a width of 1
_xAxis.axisRange += 0.5

// extend xDelta to make space for multiple datasets (if ther are one)
_xAxis.axisRange *= Double(data.dataSetCount) <----- BOOM

jadi _xAxis.axisRange adalah 0 setelah ini, dan mengarah ke scaleX ke 0. lalu sigularitas dipicu saat menerjemahkan ke pixelToValueMatrix. Setiap pembesaran saat ini memiliki perilaku yang tidak terduga.

Tampaknya kami hanya mendukung umpan xVals dari pernyataan API. Menurut Anda, apa perbaikan yang tepat? Kami mencegah zoom / scroll apa pun dalam kasus ini, atau membuat default (jika dataSetCount adalah 0, hanya tidak mengalikan), atau hanya mencetak peringatan?

Perbaikan yang tepat mungkin _xAxis.axisRange *= Double(data.dataSetCount ?? 1)

oh ya, saya baru saja mengedit - satu-satunya masalah adalah dalam kasus ini, label nilai x berantakan. Mereka diberikan dalam posisi yang sama.
BTW, tidak mungkin data.dataSetCount ?? 1 , ?? sedang diperiksa nihil, bukan 0:

(lldb) po Double(data.dataSetCount ?? 1)
0.0

Sial. Saya akan memeriksanya :-)

harus makan ... Aku hanya berpikir menanganinya seperti bar biasa

@danielgindi Saya menelusuri dan berhasil membuatnya berfungsi. Kuncinya adalah menyetel langkah ke 1, dan groupSpace ke 0.8 jika jumlah kumpulan data adalah 0. Tidak yakin apakah Anda memiliki yang lebih baik.
saya menemukan

position.x = CGFloat(i * step) + CGFloat(i) * groupSpace + groupSpace / 2.0

adalah bagian penting untuk memastikannya dirender dengan benar pada posisi x yang tepat, kita harus membuat langkah = 1 jika kumpulan data 0, dan groupSpace menjadi 0,8 juga.

Kode semacam ini didistribusikan di beberapa tempat, seperti drawLabels dalam diagram batang x penyaji sumbu, lowestVisibleXIndex/highestVisibleXIndex , calcMinMax dalam tampilan diagram batang.
Mereka memiliki pola yang sama tetapi sedikit perbedaan. Sebelum kami memperbaikinya, kami mungkin ingin menjadikannya tunggal, jika tidak kami harus mengubahnya di mana-mana.

Saya hanya tidak tahu di mana harus meletakkan pola ini. Jika Anda punya waktu, tolong bantu dalam hal ini. Saya harus kerja sekarang.

Saya mendapat kesalahan yang sama ketika secara dinamis menambahkan poin ke dataset kosong dan memanggil addXValue () setelah memanggil addEntry () memperbaikinya.

Mengerti saat mengirim larik data dengan titik nilai, [0].

@klanderson 👍: baris Anda memecahkan milik saya.

tampilan - autoScaleMinMaxEnabled = true - tampaknya menyebabkan masalah ini bagi saya saat menggambar ulang grafik, menyetel ke false tidak akan memberikan masalah ini lagi. Apakah penskalaan dengan set data kosong menyebabkan masalah?

Saya juga mengalami masalah ini, tetapi men-debug dengan pernyataan cetak atau breakpoint menyebabkan perilaku kembali normal. Mungkin semacam masalah konkurensi?

Seharusnya tidak masalah konkurensi .. Saya kira

Tidak ada respon untuk waktu yang lama dan mungkin tidak valid. Penutupan

Saya meletakkan beberapa grafik di pengontrol tampilan halaman dan sekarang saya mendapatkan kesalahan ini pada pengontrol dengan grafik "Tidak Ada Data" yang kosong hanya dengan menghubungkan tampilan ... ganjil. Namun aplikasinya tidak macet dan semuanya tampak berfungsi dengan baik di layar.

Namun, mungkinkah masalah ini harus tetap dibuka?

@AndreaPisoni Tidak benar-benar saya kira, karena Anda tidak memiliki data, itu harus berhenti rendering, saya menguji diagram batang ChartsDemo dengan data nihil, tidak mencetak apa-apa

Sudahkah Anda mencoba memiliki beberapa grafik di dalam pengontrol tampilan halaman?

Pada hari Jumat, 5 Mei 2017 pukul 16.33, Xuan [email protected] menulis:

@AndreaPisoni https://github.com/AndreaPisoni Sepertinya tidak
Anda tidak memiliki data, itu harus berhenti rendering, saya menguji diagram batang ChartsDemo
dengan data nihil, tidak mencetak apa pun

-
Anda menerima ini karena Anda disebutkan.
Balas email ini secara langsung, lihat di GitHub
https://github.com/danielgindi/Charts/issues/802#issuecomment-299410960 ,
atau nonaktifkan utasnya
https://github.com/notifications/unsubscribe-auth/AN_wJi0KSapg6tbMsQTcv1M5ryFVsf3Iks5r2t7MgaJpZM4Hp4wF
.

Jika Anda memiliki masalah baru, buka utas baru untuk dilacak.

@klanderson Terima kasih! Solusi Anda berhasil untuk saya.

Saya juga mengalami masalah yang sama. Dan solusinya tidak cocok.
Dalam kasus saya, ada beberapa data normal di dalam Diagram Garis, dan jika saya memperbesar grafik, itu macet.
Tampaknya itu terjadi pada func computeAxis(min: Double, max: Double, inverted: Bool) , menghitung p1 dan p2. Panggilan transformator menghasilkan kesalahan dan mengembalikan NaN, yang kemudian jatuh pada computeAxisValues .

Saya mengalami crash pada baris 117 di AxisRendererBase di computeAxisValues
let intervalMagnitude = pow(10.0, Ganda (Int (log10 (interval)))). RoundedToNextSignficant () `
Kesalahan fatal: Nilai ganda tidak dapat diubah menjadi int karena tidak terbatas atau NaN
p1 dan p2 di XAxisRenderer di computeAxis on line 37,38 mengembalikan NaN yang mengubah nilai min dan max menjadi NaN

`(lldb) po _matrixValueToPx
▿ CGAffineTransform

  • a: 14.2508951822917
  • b: 0,0
  • c: -0.0
  • d: -49.6888020833333
  • tx: 0,0
  • ty: 0.0

(lldb) po _viewPortHandler.touchMatrix
▿ CGAffineTransform

  • a: 1.79769313486232e + 308
  • b: 0,0
  • c: 0,0
  • d: 1.0
  • tx: nan
  • ty: nan

(lldb) po _matrixOffset
▿ CGAffineTransform

  • a: 1.0
  • b: 0,0
  • c: 0,0
  • d: 1.0
  • tx: 16.4892578125
  • ty: 159.06640625

(lldb) po _matrixValueToPx.concatenating (_viewPortHandler.touchMatrix) .concatenating (_matrixOffset)
▿ CGAffineTransform

  • a: inf
  • b: nan
  • c: -0.0
  • d: -49.6888020833333
  • tx: nan
  • ty: nan`

jadi min dan max adalah NaN dan panggilan ke computeAxisValues ​​lumpuh

Saya dapat secara konsisten membuat ini terjadi jika saya memulai dengan kumpulan data kosong dan kemudian dengan cepat menambahkan bagian data lain sebelum saya membiarkan grafik selesai dirender

Saya mendapatkan kesalahan ini berulang kali dengan LineChartView:
<Error>: CGAffineTransformInvert: singular matrix.

Saya menggunakannya untuk menampilkan kecepatan. Tetapi sampai ada gerakan apa pun itu tidak akan memperbarui atau meningkatkan kecepatan saya lagi, itulah mengapa data saya tidak akan tersedia untuk ditampilkan. Tapi setelah timer preset sebagai timer saya berakhir, ini memberikan kesalahan ini.

Saya tidak dapat menemukan solusinya.

Masalah yang sama seperti @ dipesh1604

Setelah memutakhirkan ke Swift 3 saya menemukan hal yang sama. Semoga beruntung @xRena , @ dipesh1604 ?

Masalah yang sama seperti @ dipesh1604
@ liuxuan30 @danielgindi Ada panduan?

Masalah yang Sama ...

Saya masih melihat ini, menggunakan Grafik yang dibungkus dengan UIViewRepresentable sesuai https://medium.com/@zzzzbh/plotting -in-ios-using-charts-framework-with-swiftui-222034a2bea6

Saya juga mendapatkan masalah ini seperti @gesabo saat menggunakan Bagan yang dibungkus dalam UIViewRepresentable

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

ahmedsafadii picture ahmedsafadii  ·  3Komentar

cilasgimenez picture cilasgimenez  ·  4Komentar

guanyanlin picture guanyanlin  ·  3Komentar

kirti0525 picture kirti0525  ·  3Komentar

Bharati555 picture Bharati555  ·  4Komentar