Charts: 軞ラベルの耇補を停止したす。

䜜成日 2015幎08月24日  Â·  51コメント  Â·  ゜ヌス: danielgindi/Charts

アプリ内で、 BarChartViewたたはLineChartViewのいずれかの巊軞のラベルが繰り返されるずいう問題がありたす。

最初に以䞋のスニペットを远加しお、軞䞊のラベルの数がyデヌタの最倧倀を超えないようにしたした。

self.chartView.leftAxis.labelCount = self.chartView.data.yMax > YAxisMaxLabelCount ? YAxisMaxLabelCount : self.chartView.data.yMax;

これにより、yデヌタの最倧倀が3の堎合、軞内に3ラベルのみが存圚するこずが保蚌されたした。 これで、グラフがむンタラクティブでない堎合、぀たりナヌザヌがグラフをズヌムできない堎合、これは正垞に機胜したした。

ナヌザヌがズヌムするずすぐに、ラベルの数は同じたたになり、倀フォヌマッタヌがギャップを埋めお倀を繰り返すこずができるようになりたす。

_倀が重耇しおいない軞の䟋_
screen shot 2015-08-24 at 5 07 29 pm

_同じグラフの䟋ですが拡倧しおいたす_
screen shot 2015-08-24 at 5 07 54 pm

スクリヌンショットは、巊軞が倀2を繰り返しおいるこずを瀺しおいたす。 この繰り返しのラベルの問題を解決するためのあなたの最良の提案は䜕ですか どんな助けでもありがたいです。 さらに詳しい情報が必芁な堎合はお知らせください。

ありがずう

最も参考になるコメント

これは、 granularity機胜ずしお2.2.4でリリヌスされたす

党おのコメント51件

重耇したラベルではないず思いたすが、10進倀ず敎数フォヌマッタヌが含たれおいたすか 各x軞ラベルの生の倀ず、y軞レンダラヌでxAxisラベルを描画するずきにどのようにフォヌマットするかを確認する必芁がありたす。

これを行うには、各ラベルの間隔が垞に完党な倀であるこずを確認するためのチェックを远加したした。
倉曎は、 ChartYAxisRendererクラスのcomputeAxisValues()関数内にありたす

var interval = ChartUtils.roundToNextSignificant(number: Double(rawInterval))
if(_yAxis.valueFormatter?.maximumFractionDigits == 0)
{
    interval = interval < 1 ? 1 : floor(interval)
}

倀フォヌマッタが小数桁を芁求しない堎合は、間隔を床に眮き、敎数1未満の堎合は、間隔を1に蚭定したす。

プルリク゚ストをご垌望ですか

ご協力いただきありがずうございたす。

10進数の倀を䜿甚しおいる堎合、maximumFractionDigitsが0であるのはなぜですか フォヌマッタヌの問題だず思いたす。

10進倀が必芁ないため、 maximumFractionDigits = 0を蚭定したす

pal、デヌタは10進数であり、フォヌマッタを䜿甚しお小数桁を砎棄したいだけですが、意味がありたせん。 最初にデヌタを敎数に倉換しおみたせんか

チャヌトに䞎えるy倀は次のずおりです。

(1, 3, 2, 0, 0, 7, 0)

ChartDataSetを䜜成するず、これらの倀は2倍になりたす。

ChartDataSet, label: , 7 entries:
ChartDataEntry, xIndex: 0, value 1.0
ChartDataEntry, xIndex: 1, value 3.0
ChartDataEntry, xIndex: 2, value 2.0
ChartDataEntry, xIndex: 3, value 0.0
ChartDataEntry, xIndex: 4, value 0.0
ChartDataEntry, xIndex: 5, value 7.0
ChartDataEntry, xIndex: 6, value 0.0

これは、 ChartDataEntryクラスが倀をDoubleずしお保持しおいるためです。

/// the actual value (y axis)
public var value = Double(0.0)

倀が2倍に倉曎されたしたが、グラフには最初はラベルの正しい増分が衚瀺されたすが、グラフが拡倧されるずすぐに、 ChartYAxisRendererはギャップを埋めたいず考えおおり、倀フォヌマッタヌが重耇した倀ずしお衚瀺される小数桁。

敎数のラベルのみを衚瀺したいので、チャヌトに敎数の間に远加の倀が必芁であるず想定したくありたせん。

したがっお、これにより、グラフに正しいデヌタを提䟛しおいるこずがわかりたすが、グラフは、私が䜕をしたいのかを想定しおいたす。 これはデフォルトでは問題ありたせんが、軞に敎数のみを衚瀺するオプションも提䟛する必芁がありたす。

倀フォヌマッタに察するチェックを远加するこずにより、この動䜜が可胜になりたす。 倀フォヌマッタヌをチェックするよりも、この動䜜を提䟛するためのより良い方法を知っおいるかもしれたせんが、これは私の垌望するナヌスケヌスです。

コミットa7e30dd16fbfaecb8e44c01ad8618a3a745fd101でコヌドベヌスを䜿甚しおいるこずに気づきたした。この倉曎がチャヌトの最新のコミットに実装されるず、期埅どおりに機胜したせん。

私が望む行動を達成するための最善の方法をアドバむスできたすか

予想される動䜜のgifを添付したした。

以䞋に、同じ倀を瀺すラベルはなく、ラベルが倀党䜓である必芁があるため、グラフが他のラベルの間にラベルを配眮しようずしおいないこずがわかりたす。

chart

ああ、なるほど。 たずえば[3,4]にズヌムするず、範囲は[3,4]になり、軞は[3.0、3.2、3.4、3.6、3.8、4.0]を衚瀺する必芁があり、小数桁は必芁ありたせん。それは...ですか

実際には私にできるこずは䜕もありたせん...デヌタが非垞に小さいため、そこに4〜6個のラベルを衚瀺する必芁がありたす...範囲が[0,1]で、5個のラベルを衚瀺する必芁がある堎合はどうなりたすか小数桁以倖を衚瀺したすか

範囲が小さすぎる堎合は小数桁を衚瀺するのは問題ないず思いたすが、本圓に必芁ない堎合は、同じように衚瀺できたす。 たたは、 showOnlyMinMaxEnabledずいう最倧ず最小のラベルのみを衚瀺するこずを受け入れたす

ずころで、あなたのスクリヌンショットはうたく機胜し、あなたの問題を解決したした

ラベル数を制限するのに圹立぀いく぀かのプロパティもありたす。 さたざたなスケヌルレベルに合わせお倉曎しおみるこずができたす。

    public func setLabelCount(count: Int, force: Bool)
    {
        _labelCount = count

        if (_labelCount > 25)
        {
            _labelCount = 25
        }
        if (_labelCount < 2)
        {
            _labelCount = 2
        }

        forceLabelsEnabled = force
    }

Y軞で同じ動䜜をするためには、Yズヌム制限を蚭定する必芁がありたす。 382

388

@steprescott 、388はあなたの問題を解決したしたか

問題388のコミットを芋るず、唯䞀の倉曎はビュヌポヌトの新しいプロパティです。

gifに衚瀺されおいるが、倉曎を加えた意図した動䜜をどのように取埗したすか

こんにちは@steprescott 、[_ chartView.viewPortHandler setMaximumScaleY2.f]で詊しおください。 たずえば、このように、ズヌムの粒床は、繰り返し倀を衚瀺するほど倧きくはありたせん。 良い䟋は、制限のない氎平文字線がある堎合、ズヌムが倧きいずきにすべおのY倀が繰り返されるこずです。 MaximumScaleYでは、この繰り返しは発生したせん。

無制限
screen shot 2015-09-22 at 23 29 16

制限2f付き
screen shot 2015-09-22 at 23 30 07

ねえ@noais

これは、倀の範囲が広いデヌタセットで機胜したすが、倀の範囲が狭い堎合たずえば、0〜7の倀の配列など、2倍にズヌムむンするずラベルが重耇する可胜性がありたす。

ズヌム率を制限するこずで問題は解決したしたが、倀党䜓を繰り返す問題は解決したせん。

commit a7e30dd16fbfaecb8e44c01ad8618a3a745fd101を指すChartYAxisRendererクラスを線集するず、期埅どおりの結果が埗られたした。

これは、倀をフロヌリングするこずによっお行われたした。

var interval = ChartUtils.roundToNextSignificant(number: Double(rawInterval))
if(_yAxis.valueFormatter?.maximumFractionDigits == 0)
{
    interval = interval < 1 ? 1 : floor(interval)
}

これは機胜したしたがただし、このリポゞトリのHEADを䜿甚する堎合は機胜したせん、gifに瀺されおいるのず同じ結果を提䟛するために、フレヌムワヌク内でこれを配眮するためのより良い堎所を知っおいるず思いたす。

たぶん、軞䞊のプロパティallowRepeatingValues BOOL 。 あなたたちはもっずよく知っおいるでしょう。

はい、そうです、これは1぀の回避策でした。 allowRepeatingValuesのようなメ゜ッドを簡単に䜜成できるかどうか詊しおみたしょう。

それが䞀番参考になりたす、ありがずうございたす。

ねえ@noaisず@liuxuan30。 これを調査する機䌚がありたしたか フレヌムワヌクを䜿甚しお必芁な効果を埗るこずができたしたが、このプロパティがフレヌムワヌク内のどこに最適であるか、同じ結果を達成するためのより良い方法があるかどうかはわかりたせん。

埡時間ありがずうございたす。

アルゎリズムではなく、小さな数字で重耇したラベルを生成したフォヌマッタヌが原因だず私はただ考えおいたす。 フォヌマッタヌを削陀するず、数字が正しく衚瀺されたすよね
あなたはあなたのコヌドでそれを解決するこずができたすが、それがすべおの人にずっお良いものであるかどうかはわかりたせん。
@danielgindiどう思いたすか

こんにちはみんな、allowRepeatingValuesに投祚したす、私は少数であり、重耇したy軞の倀を衚瀺したくありたせん

すべおの倀がれロの堎合、これらの繰り返し軞ラベルを取埗したす-
chart

たた、私が持っおいるコヌドスニペットは必芁なこずを実行したすが、重耇する倀を削陀するのではなく、単に敎数のみを蚱可するこずに気づきたした。 したがっお、数倀フォヌマッタず照合するこずは、これを远加するための恐ろしい方法ではありたせん。

そのスニペットで蚱可されおいないのは、重耇した倀を削陀するこずです。そのため、倀が1.1, 1.2, 1.2, 1.3で、小数点以䞋1桁を保持したい堎合は、機胜したせん。 皆さんは、この機胜の最適な堎所ず実装を知っおおり、人々がフレヌムワヌクの珟圚の問題を芋お時間を費やし、投祚するこずで、他の人も望んでいるオプションであるこずを瀺しおいたす。

allowRepeatingValues+1

@noais @ liuxuan30私が提案したものよりも、これに察するより良い解決策がありたすか

いいえ、allowRepeatingValuesを陀いお..元の問題はフォヌマッタヌに関するものだからです。 レベルに小数桁は必芁ありたせんが、デヌタには実際には次のレベルがありたす

理想的には、グラフに繰り返し倀が衚瀺されないようにする必芁がありたす。 繰り返しの倀をいく぀かのロゞックで非衚瀺にしお、䞀意の倀のみを生成するこずはできたすか

@vigyanhoon倀の背埌にある「繰り返し」ではなく、倀を「繰り返し」させるフォヌマッタヌです。 繰り返したくない堎合は、10進数のフォヌマッタヌで解決できたす。

@ liuxuan30 「_10進数のフォヌマッタヌを䞎える_」ずはどういう意味ですか 私のデヌタを䜿甚しお、 maximumFractionDigits = 0を蚭定するフォヌマッタヌを提䟛したした。 珟圚あるもので期埅される結果を埗る方法がわかりたせんか 8月28日に投皿したgifず同じ結果が埗られるフレヌムワヌクを䜿甚しお、グラフを䜜成できたしたか

numberFormatter.allowsFloats = NOを䜿甚する぀もりでしたかはいの堎合、それは圹に立ちたせんでした、ただ重耇したINTが衚瀺されたすか 繰り返し倀を衚瀺しないように管理した唯䞀の方法は、xAxis䞊/䞋に2぀のラベルを䜿甚するこずです。

@steprescottよくわからない堎合は、申し蚳ありたせん。 MaximumFractionDigitsは0であっおはなりたせん。そうでない堎合、敎数郚分のみが衚瀺されたす。 デヌタ範囲が小さく、5〜6個のラベルが必芁な堎合、maximumFractionDigits = 0を指定するず、倀が繰り返されるずいう同様の問題が発生したした。 これを修正する簡単な方法はないず思いたす。 デヌタ範囲が[0,2]であるかどうかを考えお、5぀のラベルを衚瀺する必芁がありたす0、0.4、0.8、1.2、1.6、2.0。 maximumFractionDigits = 0を適甚するず、おそらく0、0、1、1、2、2になりたす。

@injectios 、MaximumFractionDigits = 2たたは4はどうですか

こんにちは、みなさん
私はこれず同じ問題を抱えおいたす。

@ liuxuan30デヌタの皮類によっおは、小数を䜿甚しおも意味がありたせん。 人間のチャヌトのように、1.5人の人間がいるこずは決しおありたせん。1人か2人のどちらかです。

@jprosはポむントを獲埗したしたが、数孊のポむントから、範囲[0,2]の小数点なしで4぀のラベルを持぀こずはできたせん。

したがっお、 yAxis.showOnlyMinMaxEnabledをオンにしお、今のずころ回避策ずしお倀が繰り返されないようにしたす。
たたは、回避するためにChartYAxisRenderer.computeAxisで独自の倀を蚈算するロゞックを実装したす。
たたは、機胜「allowRepeatValues」を埅぀必芁がありたす

@PhilJay珟圚、そのための解決策はありたすか :-)

Androidおよび倚くの堎合iOSのPOVから、この行は次のずおりです https ://github.com/PhilJay/MPAndroidChart/blob/master/MPChartLib/src/com/github/mikephil/charting/renderer/YAxisRenderer.java#L108

この問題に取り組む堎所かもしれたせん。 軞ラベルのfloat intervalが蚈算されおおり、2぀のラベルが同じようにフォヌマットされおいる堎合は、これを䜿甚しおラベルがさらに倉曎されないようにするこずができたす。
それをすぐに考えたずきに頭に浮かぶのはそれだけです。 どう思いたすか

最倧倀を蚭定するこずで重耇をなくしたした

leftAxis.customAxisMax = maxYLabelCount

@vigyanhoonたったく別のこずです。倀は数癟䞇になる可胜性がありたすが、maxYLabelCountはできたせん。 customAxisMaxは、軞範囲の最倧倀を定矩したす。

レンダリングの問題を解決するための+1。 人のグラフもあり、[0、0、1、1、2、2]がありたす。 numberFormatter.maximumFractionDigitsを0以倖に蚭定しおも意味がありたせん。

@steprescottによっお提案された次のコヌドも私のために修正されたした。 ここでフォヌクに远加したした

https://github.com/natanrolnik/ios-charts/commit/01df4d9264e0adbef4db88763075376f4a0f255c

PRはこの問題を解決できたすか @danielgindi @ liuxuan30 @steprescottどう思いたすか このコヌドが修正されない堎合がありたすか もしそうなら、より良い解決策は䜕ですか

@natanrolnikナヌザヌがズヌムむンしお範囲が[25.2、25.3]になった堎合はどうなりたすか 間隔は1.0になりたすが、たずえば0.02になりたす。
ナヌザヌが具䜓的に最倧小数郚を0に蚭定するず、間隔が制限されたす。 しかし、私は負の倀をテストしたせんでした。
より良い解決策はただありたせんが、「allowRepeatValues」のような機胜が考えられるず思いたすか

allowRepeatedValuesに関しお同意したす

@steprescottは良い解決策だず思いたす。 倀1を粒床倉数に調敎するだけで枈みたす。

この@liuxuan30の問題では、もう存圚したせん。

このコヌドをChartYAxisRendererの75行目に配眮するず、次のようになりたす。

interval = interval < granuality ? granuality : interval       

https://github.com/noais/ios-charts/compare/master...Noais
どう思いたすか

さお、これは珟圚閉じられおいたすが、マスタヌにマヌゞされおいたせん。 これはい぀起こりそうですか

これは、 granularity機胜ずしお2.2.4でリリヌスされたす

この問題をここに投皿する必芁があるかどうかはわかりたせんが、それは私には理にかなっおいたす。

xAxisラベルにも非垞によく䌌た問題がありたす。 時間の文字列を返すカスタムIAxisValueFormatterがありたす。これは、この「月」、「朚」のような平日など、䞀郚のグラフでは「22:00」、「23:00」のような時間を提䟛したす。 他の人のためになど。

グラフを拡倧しすぎるず、次のように倀が耇補され始めたす。

Screenshot 2019-07-19 at 17 59 11

この堎合、 granularity機胜は数倀の違いで機胜するため、機胜したせん。

それらのラベルが繰り返されないようにする方法に぀いお䜕かアむデアはありたすか

ありがずう

GranularityEnabledをfalseに蚭定しおください
leftAxis.granularityEnabled = true

こんにちはみんな、ズヌムむン時にxAxis倀が繰り返されないようにしたい
私のフォヌマッタヌ
func stringForValue_ valueDouble、a​​xisAxisBase-> String {
let date = DatetimeIntervalSince1970value
date.formattedStringwithDateFormat.daymonthを返したす
}
たた、粒床を䜿甚したすが、それでも同じ問題がありたす
xAxis.granularity = 1.0
xAxis.granularityEnabled = true

誰もがそれを解決する方法を知っおいたすか

@Aaimek
私は同じ問題を抱えおいたす、あなたは解決策を芋぀けたしたか

x軞のラベルカりントを匷制し、いく぀かのポむントをプロットするずきにも同じ問題が発生したす。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡

関連する問題

guoyutaog picture guoyutaog  Â·  3コメント

ahmedsafadii picture ahmedsafadii  Â·  3コメント

Bharati555 picture Bharati555  Â·  4コメント

newbiebie picture newbiebie  Â·  3コメント

kwstasna picture kwstasna  Â·  3コメント