Pantrix UI

Sparkline

Bir sparkline: bir sayının gidişi, bir sözcüğün yerinde; ait olduğu sayının yanında. Ekseni, lejantı ve gösterilecek bir şeyi yoktur: sayının ne yöne gittiğini gösterir, gerisini bir grafik gösterir.

import com.pantrixui.components.chart.sparkline.PantrixSparkline

Örnekler

Bir sayının yanında

En yalın hâli: bir sayının yanında, o sayının son on iki haftadaki gidişi. Sayı ve adı yanında yazdığı için gidişin ekran okuyucuya ayrıca söyleyeceği bir şey yok (contentDescription = null).

val strings = PantrixTheme.strings
Row(
    horizontalArrangement = Arrangement.spacedBy(PantrixTheme.spacing.lg),
    verticalAlignment = Alignment.CenterVertically
) {
    Column {
        PantrixText(text = "Ziyaret", color = PantrixTheme.colors.textSecondary)
        PantrixText(text = strings.decimal(SPARK_VISITS.last()), style = PantrixTheme.typography.title)
    }
    PantrixSparkline(values = SPARK_VISITS, tagKey = "plain")
}

private val SPARK_VISITS = listOf(8200, 8650, 8400, 9100, 9800, 9300, 10400, 10100, 11200, 11800, 11500, 12480)

Çizgi, alan, çubuk

Aynı değerler üç türde: çizgi, altı dolu çizgi ve çubuklar. Çubuklar sıfırdan başlar; çizgi en az değerden.

Row(horizontalArrangement = Arrangement.spacedBy(PantrixTheme.spacing.lg)) {
    PantrixSparkline(values = SPARK_VISITS, contentDescription = "Ziyaretler, çizgi", tagKey = "line")
    PantrixSparkline(
        values = SPARK_VISITS,
        kind = SparklineKind.Area,
        contentDescription = "Ziyaretler, alan",
        tagKey = "area"
    )
    PantrixSparkline(
        values = SPARK_VISITS,
        kind = SparklineKind.Bar,
        contentDescription = "Ziyaretler, çubuk",
        tagKey = "bar"
    )
}

private val SPARK_VISITS = listOf(8200, 8650, 8400, 9100, 9800, 9300, 10400, 10100, 11200, 11800, 11500, 12480)

Eksik değerler ve sıfırın altı

Ölçüm gelmeyen haftalar (null) çizgide bir boşluktur; öncesi ve sonrası olmayan tek değer bir noktadır. Sıfırın altına inen değerlerin çubukları sıfırdan aşağı iner.

Row(horizontalArrangement = Arrangement.spacedBy(PantrixTheme.spacing.lg)) {
    PantrixSparkline(values = SPARK_GAPS, contentDescription = "Eksik haftalarıyla ölçüm", tagKey = "gaps")
    PantrixSparkline(
        values = SPARK_BALANCE,
        kind = SparklineKind.Bar,
        contentDescription = "Aylık kâr ve zarar",
        tagKey = "balance"
    )
}

private val SPARK_GAPS = listOf(12, 15, 14, null, null, 18, 21, 19, null, 24)

private val SPARK_BALANCE = listOf(64, 31, -12, -38, 22, 47, 58, 87)

Kendi boyutun ve rengin

Boyutu modifier verir, rengi color: yükselen bir gidiş başarı renginde, düşen bir gidiş tehlike renginde, daha geniş bir yerde.

val colors = PantrixTheme.colors
Row(horizontalArrangement = Arrangement.spacedBy(PantrixTheme.spacing.lg)) {
    PantrixSparkline(
        values = SPARK_VISITS,
        modifier = Modifier.size(160.dp, 48.dp),
        kind = SparklineKind.Area,
        color = colors.success.color,
        contentDescription = "Yükselen ziyaretler",
        tagKey = "up"
    )
    PantrixSparkline(
        values = SPARK_VISITS.reversed(),
        modifier = Modifier.size(160.dp, 48.dp),
        kind = SparklineKind.Area,
        color = colors.danger.color,
        contentDescription = "Düşen ziyaretler",
        tagKey = "down"
    )
}

private val SPARK_VISITS = listOf(8200, 8650, 8400, 9100, 9800, 9300, 10400, 10100, 11200, 11800, 11500, 12480)

Eğri, son değer ve hedef

curve çizginin bir değerden ötekine nasıl gittiğini söyler: Smooth değerlerin dışına taşmadan yuvarlar, StepAfter her değeri bir sonrakine kadar tutar. markLast = true son değeri bir noktayla işaretler; çubuklarda son çubuk tam renkte, ötekiler daha soluk çizilir. reference arkaya kesikli bir çizgi çizer: burada sıcaklıkta 20 derece, siparişte günlük hedef.

Row(horizontalArrangement = Arrangement.spacedBy(PantrixTheme.spacing.lg)) {
    PantrixSparkline(
        values = SPARK_TEMPERATURE,
        contentDescription = "Bugünün sıcaklığı",
        tagKey = "smooth",
        curve = ChartCurve.Smooth,
        markLast = true,
        reference = 20
    )
    PantrixSparkline(
        values = SPARK_TEMPERATURE,
        contentDescription = "Bugünün sıcaklığı, basamaklı",
        tagKey = "steps",
        curve = ChartCurve.StepAfter,
        markLast = true
    )
    PantrixSparkline(
        values = SPARK_ORDERS,
        kind = SparklineKind.Bar,
        contentDescription = "Bu haftanın siparişleri",
        tagKey = "orders",
        markLast = true,
        reference = 40
    )
}

private val SPARK_TEMPERATURE = listOf(12.5, 11.8, 13.2, 16.4, 19.8, 22.6, 24.1, 23.4, 21.0, 18.2, 16.9, 15.7)

private val SPARK_ORDERS = listOf(32, 45, 38, 51, 29, 47, 43)

Ortak ölçek ve kendi stili

min ve max yüksekliğin uçlarını verir: iki sunucunun işlemci kullanımı aynı ölçekte, sıfırdan yüze. Biri az çalışıyor, öteki dolu; uçlar verilmeseydi ikisi de kendi en az ve en çok değeri arasında, aynı yükseklikte görünürdü. Kesikli çizgi ikisinde de yüzde seksendeki uyarı eşiği (reference). style çizgiyi kalınlaştırır, son değerin noktasını büyütür.

val style = ChartStyle(lineWidth = 3.dp, markerSize = 10.dp)
val servers = listOf(Triple("Sunucu A", SPARK_QUIET, "quiet"), Triple("Sunucu B", SPARK_BUSY, "busy"))
Column(verticalArrangement = Arrangement.spacedBy(PantrixTheme.spacing.sm)) {
    servers.forEach { (name, load, key) ->
        Row(
            horizontalArrangement = Arrangement.spacedBy(PantrixTheme.spacing.md),
            verticalAlignment = Alignment.CenterVertically
        ) {
            PantrixText(text = name, modifier = Modifier.width(80.dp))
            PantrixSparkline(
                values = load,
                modifier = Modifier.size(160.dp, 40.dp),
                contentDescription = "$name, işlemci kullanımı",
                tagKey = key,
                style = style,
                markLast = true,
                reference = 80,
                min = 0,
                max = 100
            )
            PantrixText(text = PantrixTheme.strings.percent(load.last() / 100.0))
        }
    }
}

private val SPARK_QUIET = listOf(12, 18, 15, 22, 19, 14, 25, 21, 17, 23)

private val SPARK_BUSY = listOf(71, 78, 84, 80, 92, 88, 95, 99, 90, 86)

Dışa aktarma

export = ChartExport(...) grafiğin üstüne bir dışa aktarma düğmesi koyar: bas ve türü seç (PNG, SVG ya da PDF). Grafik dosyayı üretir ve onExport'a verir; altta adı ve boyu, PNG ise resmi görünür, "Dosyayı kaydet" onu platformun yoluyla verir.

Küçük bir çizgi de dışa aktarılır: düğme çizginin üstünde durur, dosya yalnızca çizgidir.

var file by remember { mutableStateOf<ChartExportFile?>(null) }
PantrixSparkline(
    values = SPARK_VISITS,
    contentDescription = "Son on iki günün ziyareti",
    tagKey = "exported",
    export = ChartExport(fileName = "ziyaret") { file = it }
)
ExportedFile(file, tagKey = "exported")

private val SPARK_VISITS = listOf(8200, 8650, 8400, 9100, 9800, 9300, 10400, 10100, 11200, 11800, 11500, 12480)

API

values

Bir sparkline: bir sayının gidişi, bir sözcüğün yerinde; ait olduğu sayının yanında. Ekseni, lejantı ve gösterilecek bir şeyi yoktur: sayının ne yöne gittiğini gösterir, gerisini bir grafik gösterir.

ParametreTürVarsayılanNe olduğu
valuesList<Number?>değerler, okundukları sırayla.
modifierModifierModifiersparkline'ın modifier'ı. Buradaki bir boyut sparkline'ındır.
kindSparklineKindSparklineKind.Linedeğerlerin bir çizgi mi, bir alan mı, çubuklar mı olduğu.
colorColorColor.Unspecifiedçizildiği renk.
contentDescriptionString?nullgidişin neyin gidişi olduğu, birkaç sözcükle, ekran okuyucu için. null onu ekran okuyucunun okuduklarının dışında bırakır.
tagKeyString?nullsparkline'ın otomasyon anahtarı: sparkline Sparkline_<tagKey> olur.
exportChartExport?nullgrafiği uygulamanın dışına PNG, SVG ya da PDF olarak çıkarmayı sağlayan şey: grafiğin üstündeki bir düğme onun o anki hâlinin dosyasını üretip verir (bkz. ChartExport). null, grafikte böyle bir düğme yoktur.
styleChartStyle?nulltemanınkilerin üstüne konan, çizildiği ölçüler: çizginin kalınlığı (lineWidth), iki çubuğun arası (barGap), son değerin işareti (markerSize) ve referans çizgisinin kalınlığı (markLineWidth).
curveChartCurveChartCurve.Linearçizginin ya da alanın bir değerden ötekine nasıl gittiği. Çubukların eğrisi yoktur.
markLastBooleanfalseson değerin işaretlenip işaretlenmediği: çizgide ya da alanda stilin markerSize'ı büyüklüğünde bir nokta, çubuklarda son çubuk color ile, ötekiler onun daha soluk bir payıyla. Son değer, sayı olan son değerdir.
referenceNumber?nullsparkline'ın boyunca, değerlerinin arkasına, grafiklerin yazı renginde kesikli bir çizginin çizildiği değer: bir hedef ya da gidişin başladığı yer. null hiçbirini çizmez.
minNumber?nullsparkline'ın dibindeki değer, ya da değerlerinin en azı için null. Bir sayıdır ve max'tan küçüktür.
maxNumber?nulltepesindeki değer, ya da değerlerinin en çoğu için null.

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ı.

Erişilebilirlik