Pantrix UI

Range Chart

Her yerde iki değerin arasında kalanın grafiği: bir günün en soğuğu ve en sıcağı, bir fiyatın gördüğü en az ve en çok, bir vardiyanın başladığı ve bittiği saatler.

import com.pantrixui.components.chart.range.PantrixRangeChart

Örnekler

Günün en düşüğü ve en yükseği

En yalın hâli: satırlar, satırın yerini veren x, alt değer (low), üst değer (high) ve aralığın adı. Bandın iki çizgisi yumuşak gidiyor (curve).

İmleci bir günün üstüne getir ya da güne dokun: bandın iki ucu işaretlenir ve tooltip iki değeri birlikte yazar. Eksen sıfırdan başlamıyor: bir aralığın hiçbir yeri sıfırın üstünde durmaz.

PantrixRangeChart(
    data = WEATHER,
    x = { it.day },
    low = { it.coldest },
    high = { it.warmest },
    name = "Sıcaklık",
    curve = ChartCurve.Smooth,
    yAxis = ChartAxis(format = { "${it.toInt()}°" }),
    description = "Haftanın günlerine göre en düşük ve en yüksek sıcaklık",
    tagKey = "plain"
)

private data class Weather(
    val day: String,
    val coldest: Int,
    val warmest: Int
)

private val WEATHER = listOf(
    Weather("Pzt", coldest = 9, warmest = 17),
    Weather("Sal", coldest = 11, warmest = 19),
    Weather("Çar", coldest = 8, warmest = 15),
    Weather("Per", coldest = 6, warmest = 14),
    Weather("Cum", coldest = 10, warmest = 21),
    Weather("Cmt", coldest = 13, warmest = 24),
    Weather("Paz", coldest = 12, warmest = 22)
)

Bant ya da çubuk

Aynı aralık iki türlü çizilir. Anahtarı çevir: bant, her güne alt değerden üst değere giden bir çubuk olur (RangeKind.Bar). Çubuğun iki ucu da yuvarlaktır ve her günün, grafiğin genişliğinden bir bandı vardır.

Bant, yerden yere süren bir şeye uyar: gün gün değişen sıcaklık. Çubuk, her yerde ayrı ayrı okunan aralıklara.

var bars by remember { mutableStateOf(false) }
PantrixSwitchButton(
    checked = bars,
    onCheckedChange = { bars = it },
    label = "Çubuk olarak",
    tagKey = "range_bars"
)
PantrixRangeChart(
    data = WEATHER,
    x = { it.day },
    low = { it.coldest },
    high = { it.warmest },
    name = "Sıcaklık",
    kind = if (bars) RangeKind.Bar else RangeKind.Area,
    yAxis = ChartAxis(format = { "${it.toInt()}°" }),
    description = "Haftanın günlerine göre en düşük ve en yüksek sıcaklık",
    tagKey = "kinds"
)

private data class Weather(
    val day: String,
    val coldest: Int,
    val warmest: Int
)

private val WEATHER = listOf(
    Weather("Pzt", coldest = 9, warmest = 17),
    Weather("Sal", coldest = 11, warmest = 19),
    Weather("Çar", coldest = 8, warmest = 15),
    Weather("Per", coldest = 6, warmest = 14),
    Weather("Cum", coldest = 10, warmest = 21),
    Weather("Cmt", coldest = 13, warmest = 24),
    Weather("Paz", coldest = 12, warmest = 22)
)

Değerler iki ucunda

Vardiyaların başladığı ve bittiği saat, her ekip için bir çubuk. İki değer çubuğun iki ucuna yazılır (labels): bitiş üstüne, başlangıç altına. Saatler eksende ve etikette aynı biçimde yazılıyor (format). Eksen günün altışar saatinde işaretli (values): yuvarlak adımlar onu beşer saatte işaretlerdi.

Çizgi öğle arasını gösteriyor (marks): hangi vardiyanın onu içine aldığı okunur.

val hour: (Double) -> String = { "${it.toInt()}:00" }
PantrixRangeChart(
    data = SHIFT_HOURS,
    x = { it.team },
    low = { it.start },
    high = { it.end },
    name = "Vardiya",
    kind = RangeKind.Bar,
    labels = ChartDataLabels(format = hour),
    yAxis = ChartAxis(values = listOf(0.0, 6.0, 12.0, 18.0, 24.0), format = hour),
    marks = listOf(ChartReferenceLine(y = 12, label = "Öğle arası")),
    description = "Ekiplere göre vardiyanın başladığı ve bittiği saat",
    tagKey = "labels"
)

private data class ShiftHours(
    val team: String,
    val start: Int,
    val end: Int
)

private val SHIFT_HOURS = listOf(
    ShiftHours("Depo", start = 6, end = 14),
    ShiftHours("Mağaza", start = 9, end = 21),
    ShiftHours("Destek", start = 8, end = 18),
    ShiftHours("Akşam", start = 14, end = 22)
)

Yatay vardiyalar

Aynı vardiyalar yatay (horizontal = true): ekipler grafiğin yanından aşağı dizilir, her vardiya başladığı saatten bittiği saate soldan sağa uzanır, bir çizelgedeki gibi. Saatler grafiğin altına yazılır; öğle arası çizgisi grafiği yukarıdan aşağı keser.

val hour: (Double) -> String = { "${it.toInt()}:00" }
PantrixRangeChart(
    data = SHIFT_HOURS,
    x = { it.team },
    low = { it.start },
    high = { it.end },
    name = "Vardiya",
    kind = RangeKind.Bar,
    horizontal = true,
    labels = ChartDataLabels(format = hour),
    yAxis = ChartAxis(values = listOf(0.0, 6.0, 12.0, 18.0, 24.0), format = hour),
    marks = listOf(ChartReferenceLine(y = 12, label = "Öğle arası")),
    description = "Ekiplere göre vardiyanın başladığı ve bittiği saat, yatay",
    tagKey = "horizontal_shifts"
)

private data class ShiftHours(
    val team: String,
    val start: Int,
    val end: Int
)

private val SHIFT_HOURS = listOf(
    ShiftHours("Depo", start = 6, end = 14),
    ShiftHours("Mağaza", start = 9, end = 21),
    ShiftHours("Destek", start = 8, end = 18),
    ShiftHours("Akşam", start = 14, end = 22)
)

Kesik çizgiler ve işaretler

Bandın görünüşü serinin kendisinden: iki çizgisi kesik (dash), her noktasında bir işaret (marker), aradaki ton her zamankinden koyu (fillAlpha). Anahtarı kapat (lines = false): çizgiler gider, bant tonu ve işaretleriyle kalır.

var lines by remember { mutableStateOf(true) }
PantrixSwitchButton(
    checked = lines,
    onCheckedChange = { lines = it },
    label = "Bandın çizgileri",
    tagKey = "range_lines"
)
PantrixRangeChart(
    data = OUTLOOK,
    x = { it.month },
    low = { it.least },
    high = { it.most },
    name = "Beklenen aralık",
    lines = lines,
    dash = ChartDash.Dashed,
    marker = ChartMarker.Circle,
    fillAlpha = 0.28f,
    description = "Aylara göre siparişlerin beklenen aralığı, kesik çizgiler ve işaretlerle",
    tagKey = "look"
)

private data class Outlook(
    val month: String,
    val expected: Int,
    val least: Int,
    val most: Int
)

private val OUTLOOK = listOf(
    Outlook("Tem", expected = 420, least = 400, most = 440),
    Outlook("Ağu", expected = 450, least = 415, most = 485),
    Outlook("Eyl", expected = 470, least = 420, most = 520),
    Outlook("Eki", expected = 510, least = 440, most = 580),
    Outlook("Kas", expected = 540, least = 450, most = 630),
    Outlook("Ara", expected = 600, least = 480, most = 720)
)

Tahmin ve sınırları

Bandın üstünde bir çizgi isteyen grafik bir PantrixChart'tır: tahminin güvenilen sınırları bir RangeSeries, tahminin kendisi ondan sonra verilen bir LineSeries. Sonra verilen seri öncekinin üstüne çizilir.

Tooltip iki seriyi birlikte yazar: sınırları bir aralık, tahmini tek bir değer olarak. Lejantta aralık bir yama, tahmin kesik bir çizgidir.

PantrixChart(
    series = listOf(
        RangeSeries(
            key = "bounds",
            name = "Beklenen aralık",
            data = OUTLOOK,
            x = { it.month },
            low = { it.least },
            high = { it.most },
            curve = ChartCurve.Smooth
        ),
        LineSeries(
            key = "expected",
            name = "Tahmin",
            data = OUTLOOK,
            x = { it.month },
            y = { it.expected },
            curve = ChartCurve.Smooth,
            dash = ChartDash.Dashed
        )
    ),
    description = "Aylara göre sipariş tahmini ve beklenen aralığı",
    tagKey = "with_line"
)

private data class Outlook(
    val month: String,
    val expected: Int,
    val least: Int,
    val most: Int
)

private val OUTLOOK = listOf(
    Outlook("Tem", expected = 420, least = 400, most = 440),
    Outlook("Ağu", expected = 450, least = 415, most = 485),
    Outlook("Eyl", expected = 470, least = 420, most = 520),
    Outlook("Eki", expected = 510, least = 440, most = 580),
    Outlook("Kas", expected = 540, least = 450, most = 630),
    Outlook("Ara", expected = 600, least = 480, most = 720)
)

Bir aralığa basmak

Bir basış, aralığın iki değerini de alır: noktanın value'su üst değer, from'u alt değerdir; text ikisini grafiğin yazdığı gibi taşır. Bir güne bas: alttaki satır o günün aralığını ve genişliğini yazar.

var pressed by remember { mutableStateOf<String?>(null) }
PantrixRangeChart(
    data = WEATHER,
    x = { it.day },
    low = { it.coldest },
    high = { it.warmest },
    name = "Sıcaklık",
    kind = RangeKind.Bar,
    onSelect = { point ->
        val wide = point.value - (point.from ?: point.value)
        pressed = "${point.label}: ${point.text}, aradaki fark ${wide.toInt()} derece"
    },
    description = "Haftanın günlerine göre en düşük ve en yüksek sıcaklık",
    tagKey = "press"
)
PantrixText(text = pressed ?: "Bir güne bas")

private data class Weather(
    val day: String,
    val coldest: Int,
    val warmest: Int
)

private val WEATHER = listOf(
    Weather("Pzt", coldest = 9, warmest = 17),
    Weather("Sal", coldest = 11, warmest = 19),
    Weather("Çar", coldest = 8, warmest = 15),
    Weather("Per", coldest = 6, warmest = 14),
    Weather("Cum", coldest = 10, warmest = 21),
    Weather("Cmt", coldest = 13, warmest = 24),
    Weather("Paz", coldest = 12, warmest = 22)
)

Eksik değerler

Değeri olmayan günler: çarşamba ve cumartesi ölçülmemiş. Bant, değeri olmayan günden önce biter ve sonra yeniden başlar; iki yanında komşusu olmayan gün, alt değerinden üst değerine giden bir çizgidir.

PantrixRangeChart(
    data = WEATHER,
    x = { it.day },
    low = { row -> row.coldest.takeIf { row.day !in UNMEASURED } },
    high = { row -> row.warmest.takeIf { row.day !in UNMEASURED } },
    name = "Sıcaklık",
    description = "Haftanın günlerine göre sıcaklık, ölçülmeyen iki günle",
    tagKey = "missing"
)

private data class Weather(
    val day: String,
    val coldest: Int,
    val warmest: Int
)

private val WEATHER = listOf(
    Weather("Pzt", coldest = 9, warmest = 17),
    Weather("Sal", coldest = 11, warmest = 19),
    Weather("Çar", coldest = 8, warmest = 15),
    Weather("Per", coldest = 6, warmest = 14),
    Weather("Cum", coldest = 10, warmest = 21),
    Weather("Cmt", coldest = 13, warmest = 24),
    Weather("Paz", coldest = 12, warmest = 22)
)

private val UNMEASURED = setOf("Çar", "Cmt")

API

data

Her yerde iki değerin arasında kalanın grafiği: bir günün en soğuğu ve en sıcağı, bir fiyatın gördüğü en az ve en çok, bir vardiyanın başladığı ve bittiği saatler.

ParametreTürVarsayılanNe olduğu
dataList<T>satırlar.
x(T) -> Anybir satırın grafik boyunca nerede durduğu: bir ad, bir gün, kendisine eşit olan herhangi bir şey.
low(T) -> Number?bir satırın alt değeri, ya da yoksa null.
high(T) -> Number?bir satırın üst değeri, ya da yoksa null.
nameStringiki değerin neyin değeri olduğu: tooltip'in onlara verdiği ad, ve description'ı olmayan grafiğin ekran okuyucudaki adı.
modifierModifierModifiergrafiğin modifier'ı. Buradaki bir yükseklik grafiğindir.
kindRangeKindRangeKind.Areaaralığın yerden yere giden bir bant mı, her yerde bir çubuk mu olduğu.
curveChartCurveChartCurve.Linearbir bandın iki çizgisinin bir noktadan ötekine nasıl gittiği. Bir çubuğun çizgisi yoktur.
linesBooleantruebandın iki çizgisinin çizilip çizilmediği, ya da aralarındaki tonun tek başına kalıp kalmadığı.
dashChartDash?nulliki çizginin bütün mü, kesik mi, noktalı mı çizildiği. null onları bütün çizer; grafiğin desenleri açıksa (ChartStyle.patterns) kesik.
markerChartMarkerChartMarker.Noneiki çizginin her noktasına konan işaret. Verilmezse işaret yoktur.
fillAlphaFloat0.16fçizgilerin arasındaki tonun aralığın renginden ne kadar aldığı, hiçten tamamına kadar. Verilmezse altıda biri kadar.
patternChartPattern?nullbandın ya da çubukların renklerinin yanında çizildiği desen. null hiçbirini çizmez; grafiğin desenleri açıkken de: tek aralıklı bir grafikte onu ayırt edecek başka bir şey yoktur.
colorColorColor.Unspecifiedaralığın çizildiği renk. Verilmezse grafiğin renklerinin ilkidir.
horizontalBooleanfalseyerlerin grafiğin altı boyunca dizilip aralığın yukarı uzanması yerine, yanından aşağı dizilip aralığın boyunca uzanıp uzanmadığı.
labelsChartDataLabels?nullaralığın uçlarına yazılan iki değer, üsttekisi üstüne ve alttakisi altına, yerleri olduğunda. null hiçbirini yazmaz.
xAxisChartAxis?ChartAxis()yerlerin ekseni, grafiğin altında, horizontal ise yanında. null ondan hiçbir şey çizmez.
yAxisChartAxis?ChartAxis()değerlerin ekseni, grafiğin yanında, horizontal ise altında. null ondan hiçbir şey çizmez.
marksList<ChartMark>emptyList()aralığın yanında çizim alanına çizilen çizgiler ve bantlar: bir sınır, bir dizi yer.
tooltipChartTooltip?ChartTooltip()gösterilen yer için gösterilen şey. null hiç göstermez.
zoomChartZoom?nullokuyucunun yerlerin bir kısmına yakından bakmasını ve geri kalanı boyunca kaydırmasını sağlayan şey. Grafiğe verilmedikçe null'dır; null bütün yerleri gösterir, başka bir şey yapmaz.
exportChartExport?nullokuyucunun grafiği uygulamadan bir dosya olarak çıkarmasını sağlayan şey: bir resim, ya da her boyutta keskin bir çizim. Grafiğe verilmedikçe null'dır, ve grafiğin böyle bir düğmesi olmaz.
empty(@Composable () -> Unit)?nullgrafiğin çizecek değeri yokken çizim alanında gösterdiği şey: temanın bunun için yazdığı sözün ("Veri yok") yerine; o zaman ekran okuyucuya da o söz söylenmez. null sözü yazar. Grafiğin dışa aktarıldığı dosya sözü yazar.
stateChartStaterememberChartState()okuyucunun gösterdiği yer: verilmezse grafiğin kendisininki.
descriptionString?nullgrafiğin ne gösterdiği, birkaç sözcükle, ekran okuyucu için.
onSelect((ChartPoint) -> Unit)?nullbasılan aralıkla çağrılır.
styleChartStyle?nullbu grafiğin kendi geometrisi.
colorsChartColors?nullbu grafiğin kendi renkleri, temanınkiler olmadıkları yerde.
tagKeyString?nullgrafiğin otomasyon anahtarı. Grafik, olduğu PantrixChart gibi etiketlenir, Chart_<tagKey>, ve parçaları ile olayları o grafiğinkilerdir; tek serisinin anahtarı range'dir.

ChartStyle

Bir grafiğin geometrisi: hiçbir şey söylemediğinde ne kadar yüksek olduğu, çizgilerinin ne kadar kalın, işaretlerinin ne kadar büyük olduğu ve parçalarının arasındaki boşluk; ve dolgularının renklerinin yanında desen alıp almadığı.

ParametreTürVarsayılanNe olduğu
heightDpDp.UnspecifiedGrafiğin modifier'ı ona bir yükseklik vermediğinde çizim alanının, eksenleriyle birlikte, ne kadar yüksek olduğu. Çizim alanının üstündeki ya da altındaki bir lejant kendi yüksekliğini ekler.
lineWidthDpDp.UnspecifiedBir serinin çizgisinin kalınlığı.
markerSizeDpDp.UnspecifiedBir noktadaki işaretin genişliği ve yüksekliği.
selectedMarkerSizeDpDp.UnspecifiedAynısı, gösterilen noktadaki işaret için.
gridWidthDpDp.UnspecifiedKılavuz çizgilerinin, eksenler boyunca çizilen çizgilerin ve gösterilen yeri işaretleyen çizginin kalınlığı. Sıfır hiçbirini çizmez.
labelGapDpDp.UnspecifiedÇizim alanıyla yanına ve altına yazılanın arası, ve onunla bir eksenin başlığının arası.
tickSpacingDpDp.UnspecifiedDeğerlerin ekseni boyunca işaretlenen iki değerin arasındaki en az boşluk: eksen söylemediğinde kaç tanesinin işaretleneceğine karar veren şey.
legendGapDpDp.UnspecifiedLejantla yanında durduğu grafiğin arası.
legendItemGapDpDp.UnspecifiedLejantın bir kaydıyla sonrakinin arası.
swatchSizeDpDp.UnspecifiedBir serinin lejanttaki ve tooltip'teki örneğinin ne kadar geniş olduğu: çizgisinin kısa bir parçası ya da dolgusunun bir yaması.
swatchGapDpDp.UnspecifiedO örnekle ardındaki adın arası.
tooltipShapeShapeSpecShapeSpec.UnspecifiedTooltip'in köşeleri: markanın şekil ölçeğinin bir basamağı ya da sabit bir şekil.
tooltipHorizontalPaddingDpDp.UnspecifiedTooltip'in yanlarıyla içindekinin arası.
tooltipVerticalPaddingDpDp.UnspecifiedÜstü ve altıyla içindekinin arası, ve başlığıyla satırlarının arası.
tooltipGapDpDp.UnspecifiedGösterilen yerle yanındaki tooltip'in arası.
tooltipElevationDpDp.UnspecifiedTooltip'in gölgesi.
barGapDpDp.UnspecifiedBir yerde yan yana duran iki çubuğun arası. Bunun için fazla ince olan çubuklar daha yakın durur.
barMaxWidthDpDp.UnspecifiedBir çubuğun en fazla ne kadar geniş olduğu, yerinin ne kadar yeri olursa olsun: üç yerli bir grafik üç kalas değildir.
barRadiusDpDp.UnspecifiedBir çubuğun ucunun, sıfırdan uzak ucunun, köşelerinin ne kadar yuvarlak olduğu.
sliceGapDpDp.UnspecifiedBir pastanın yan yana duran iki dilimi arasında; pastanın ortasından kenarına kadar aynı genişlikte.
selectedSliceOffsetDpDp.UnspecifiedBir pastanın gösterilen diliminin, pastanın kenarından ne kadar dışarı taştığı. Pasta çevresinde bu kadar yer bırakır: dilimin duracağı yer olsun.
gaugeWidthDpDp.UnspecifiedBir göstergenin yayının kalınlığı. Bir yay, yarıçapının yarısından kalın olmaz.
meterHeightDpDp.UnspecifiedBir ölçüm grubunun çubuğunun yüksekliği.
trackerHeightDpDp.UnspecifiedBir durum izleyicinin bloklarının yüksekliği.
bubbleMinSizeDpDp.UnspecifiedBir saçılım grafiğinin en küçük balonunun genişliği: büyüklüğü hiç olmayan ya da bir alan olarak görülemeyecek kadar az olan nokta da bir noktadır.
bubbleMaxSizeDpDp.UnspecifiedEn büyük balonunun genişliği: büyüklüğü grafiğin en büyüğü olanın.
navigatorHeightDpDp.UnspecifiedZoom'unda gezgin şeridi olan bir grafikte, çizim alanının altındaki şeridin yüksekliği: grafiğin görünen kısmı onun üstünde işaretlenir ve kaydırılır. Yerleri yanından aşağı dizilen grafikte şerit çizim alanının yanında durur ve bu onun genişliğidir.
barBandShareFloatFloat.NaNBir yerin çubuklarının bandından aldığı pay, sıfırdan çok ve en fazla bir: kalanı bir yerin çubuklarıyla sonrakininkiler arasındaki boşluktur. Çubuklar yine de barMaxWidth'ten geniş olmaz.
markLineWidthDpDp.UnspecifiedBir işaretin çizgisinin kalınlığı: bir hedefin, bir sınırın, bir günün. Sıfır çizgi çizmez; işaretin yazısı yine yazılır.
markBandAlphaFloatFloat.NaNBir işaretin bandının renginin ne kadarıyla çizildiği, sıfırdan bire: bant serilerin arkasında durur ve bir tondur.
patternsBoolean?nullBir grafiğin serilerinin, dilimlerinin ve karolarının dolgularının renklerinin yanında desenlerle, çizgilerinin de sırayla kesik çizilip çizilmediği (ChartPattern): renkleri ayırt edemeyen bir okuyucu için onları ayıran şey. Verilmezse sistemin ayarına uyulur: sistem şeyleri renksiz ayırt etmeye ayarlıysa açık (iOS'ta "Differentiate Without Color", Android'de renk düzeltme), değilse kapalı.
nodeWidthDpDp.UnspecifiedBir sankey düğümünün ne kadar geniş olduğu.
nodeGapDpDp.UnspecifiedBir sankey kolonunun iki düğümü arası.

ChartColors

Temanın renklerini almayan bir grafik için, onun neyle boyandığı: verilen renk kullanılır, verilmeyen temanınki kalır.

ParametreTürVarsayılanNe olduğu
seriesList<Color>emptyList()Serilerin çizildiği renkler, dağıtıldıkları sırayla, kendi rengini söylemeyen seriler için. Boşsa temanın grafik renkleridir.
gridColorColor.UnspecifiedBir eksenin işaretlerinde grafik boyunca çizilen çizgiler. Temanın divider'ı.
axisColorColor.UnspecifiedBir eksen boyunca çizilen çizgi. Temanın border'ı.
labelColorColor.UnspecifiedEksenlerin yanına yazılanlar: değerler, yerler ve eksenlerin başlıkları, bir de lejanttaki adlar. Temanın textSecondary'si.
crosshairColorColor.UnspecifiedGösterilen yeri işaretleyen çizgi. Temanın borderHover'ı: içinden geçtiği kılavuz çizgilerinden güçlü, arkasında durduğu serilerden sessiz.
tooltipContainerColorColor.UnspecifiedTooltip'in dolgusu. Temanın surface'i.
tooltipBorderColorColor.UnspecifiedTooltip'in kenarı. Temanın border'ı.
tooltipTextColorColor.UnspecifiedTooltip'in başlığı ve değerleri. Temanın textPrimary'si.
tooltipLabelColorColor.UnspecifiedTooltip'teki seri adları. Temanın textSecondary'si.
risingColorColor.UnspecifiedYukarı giden bir değerin çizildiği renk: bir şelalenin ekleyen adımı. Temanın success'i.
fallingColorColor.UnspecifiedAşağı giden bir değerin çizildiği renk: bir şelalenin götüren adımı. Temanın danger'ı.

Erişilebilirlik