Pantrix UI

Line Chart

Bir kez verilen satırlardan bir çizgi grafiği: onlardan okunan values'ın her biri için bir çizgi, x'in onlardan okuduğu yerler boyunca.

import com.pantrixui.components.chart.line.PantrixLineChart

Örnekler

Aynı satırlardan çizgiler

En yalın hâli: satırlar, satırın yerini veren x ve her seri için bir ChartValue. Seri, anahtarını ve adını alır; sondaki blok satırdan değerini okur.

Üç seri temanın ilk üç grafik rengini alır. Lejanttaki bir ada bas: seri çıkar, kalanlar renklerini korur.

PantrixLineChart(
    data = TRAFFIC,
    x = { it.day },
    values = listOf(
        ChartValue("search", "Arama") { it.search },
        ChartValue("direct", "Doğrudan") { it.direct },
        ChartValue("social", "Sosyal") { it.social }
    ),
    description = "Haftanın günlerine göre ziyaretin üç kaynağı",
    tagKey = "plain"
)

private data class Traffic(
    val day: String,
    val search: Int,
    val direct: Int,
    val social: Int
)

private val TRAFFIC = listOf(
    Traffic("Pzt", search = 420, direct = 240, social = 130),
    Traffic("Sal", search = 480, direct = 260, social = 120),
    Traffic("Çar", search = 455, direct = 300, social = 165),
    Traffic("Per", search = 530, direct = 280, social = 190),
    Traffic("Cum", search = 510, direct = 330, social = 240),
    Traffic("Cmt", search = 360, direct = 210, social = 310),
    Traffic("Paz", search = 330, direct = 180, social = 285)
)

Sayı ekseni

Bir yürüyüş yolunun yüksekliği, yol üzerinde düzensiz aralıklarla ölçülmüş: yerler kilometre olarak birer sayı. xAxis = ChartAxis(numeric = true) ile noktalar sayıları kadar aralıklı durur: 0,8 km ile 1,2 km birbirine yakın, 7,5 km ile 11 km uzak; eksen yuvarlak kilometrelere işaretlenir ve yazımını format verir. Zirvenin çizgisi bir ölçümün yerinde değil, 9,6 km'de duruyor.

Anahtarı kapat: sayılar birer ad olur ve eşit aralıklarla dizilir; yolun dikliği yanlış okunur.

var numeric by remember { mutableStateOf(true) }
val strings = PantrixTheme.strings
PantrixSwitchButton(
    checked = numeric,
    onCheckedChange = { numeric = it },
    label = "Sayı ekseni",
    tagKey = "line_numeric"
)
PantrixLineChart(
    data = TRAIL,
    x = { it.first },
    values = listOf(ChartValue("height", "Yükseklik (m)") { it.second }),
    curve = ChartCurve.Smooth,
    xAxis = ChartAxis(numeric = numeric, format = { "${strings.decimal(it)} km" }),
    marks = listOf(ChartReferenceLine(x = 9.6, label = "Zirve")),
    description = "Bir yürüyüş yolunun, yol boyunca ölçülen yüksekliği",
    tagKey = "numeric"
)

private val TRAIL = listOf(
    0.0 to 420,
    0.8 to 455,
    1.2 to 470,
    2.5 to 560,
    4.0 to 610,
    7.5 to 820,
    9.6 to 1_040,
    11.0 to 930,
    12.4 to 780
)

Çizginin gidişi

curve çizginin bir noktadan ötekine nasıl gittiğini söyler. Linear düz gider. Smooth noktalardan yuvarlak geçer ama onların arasında kalır: bir tepe ya da çukur uydurmaz. Basamaklı olanlar değeri bir noktadan ötekine düz taşır: StepAfter değer değişene kadar yerinde durur, bir stok ya da bir fiyat gibi; StepBefore bir sonraki değere önceden geçer; Step ikisinin ortasında basamak atar.

var curve by remember { mutableStateOf(ChartCurve.Smooth) }
PantrixSegmentButton(
    options = CURVES,
    selected = curve,
    onSelect = { curve = it },
    fullWidth = false,
    tagKey = "curve"
)
PantrixLineChart(
    data = TRAFFIC,
    x = { it.day },
    values = listOf(ChartValue("search", "Arama", marker = ChartMarker.Circle) { it.search }),
    curve = curve,
    description = "Haftanın günlerine göre aramadan gelen ziyaret",
    tagKey = "curves"
)

private data class Traffic(
    val day: String,
    val search: Int,
    val direct: Int,
    val social: Int
)

private val TRAFFIC = listOf(
    Traffic("Pzt", search = 420, direct = 240, social = 130),
    Traffic("Sal", search = 480, direct = 260, social = 120),
    Traffic("Çar", search = 455, direct = 300, social = 165),
    Traffic("Per", search = 530, direct = 280, social = 190),
    Traffic("Cum", search = 510, direct = 330, social = 240),
    Traffic("Cmt", search = 360, direct = 210, social = 310),
    Traffic("Paz", search = 330, direct = 180, social = 285)
)

private val CURVES = listOf(
    SegmentOption(value = ChartCurve.Linear, label = "Düz", tagKey = "linear"),
    SegmentOption(value = ChartCurve.Smooth, label = "Yumuşak", tagKey = "smooth"),
    SegmentOption(value = ChartCurve.Step, label = "Basamak", tagKey = "step"),
    SegmentOption(value = ChartCurve.StepBefore, label = "Önce", tagKey = "before"),
    SegmentOption(value = ChartCurve.StepAfter, label = "Sonra", tagKey = "after")
)

Renkten fazlasıyla ayrılan seriler

Renk tek başına her okuyucuya yetmez: kırmızıyla yeşili ayırmayan bir göze, siyah beyaz bir çıktıya, çok serili bir grafiğe. Burada her seri renginden fazlasıyla da ayrılıyor: biri düz çizgi ve daire, biri kesik çizgi ve kare, biri noktalı çizgi ve üçgen.

Aynı örnek lejantta ve tooltip'te de durur: seri orada da çizgisiyle ve şekliyle tanınır.

PantrixLineChart(
    data = TRAFFIC,
    x = { it.day },
    values = listOf(
        ChartValue("search", "Arama", marker = ChartMarker.Circle) { it.search },
        ChartValue("direct", "Doğrudan", dash = ChartDash.Dashed, marker = ChartMarker.Square) { it.direct },
        ChartValue("social", "Sosyal", dash = ChartDash.Dotted, marker = ChartMarker.Triangle) { it.social }
    ),
    description = "Haftanın günlerine göre ziyaretin üç kaynağı",
    tagKey = "told_apart"
)

private data class Traffic(
    val day: String,
    val search: Int,
    val direct: Int,
    val social: Int
)

private val TRAFFIC = listOf(
    Traffic("Pzt", search = 420, direct = 240, social = 130),
    Traffic("Sal", search = 480, direct = 260, social = 120),
    Traffic("Çar", search = 455, direct = 300, social = 165),
    Traffic("Per", search = 530, direct = 280, social = 190),
    Traffic("Cum", search = 510, direct = 330, social = 240),
    Traffic("Cmt", search = 360, direct = 210, social = 310),
    Traffic("Paz", search = 330, direct = 180, social = 285)
)

Eksensiz, küçük bir çizgi

Bir kartın köşesindeki küçük bir çizgi: eksenleri ve lejantı yok (null), yüksekliği altmış dp. Değerleri yine yerinde durur: imleçle ya da parmakla gösterilen günün değeri tooltip'te okunur, ekran okuyucu günleri tek tek söyler.

Ekseni olmayan grafik, değerlerinin nasıl yazılacağını tooltip'ine söyler (ChartTooltip.format): burada sayının ardına neyin sayısı olduğu ekleniyor.

val strings = PantrixTheme.strings
PantrixLineChart(
    data = TRAFFIC,
    x = { it.day },
    values = listOf(ChartValue("search", "Arama") { it.search }),
    modifier = Modifier.height(60.dp),
    curve = ChartCurve.Smooth,
    xAxis = null,
    yAxis = null,
    tooltip = ChartTooltip(format = { "${strings.decimal(it)} ziyaret" }),
    description = "Haftanın günlerine göre aramadan gelen ziyaret",
    tagKey = "bare"
)

private data class Traffic(
    val day: String,
    val search: Int,
    val direct: Int,
    val social: Int
)

private val TRAFFIC = listOf(
    Traffic("Pzt", search = 420, direct = 240, social = 130),
    Traffic("Sal", search = 480, direct = 260, social = 120),
    Traffic("Çar", search = 455, direct = 300, social = 165),
    Traffic("Per", search = 530, direct = 280, social = 190),
    Traffic("Cum", search = 510, direct = 330, social = 240),
    Traffic("Cmt", search = 360, direct = 210, social = 310),
    Traffic("Paz", search = 330, direct = 180, social = 285)
)

API

data

Bir kez verilen satırlardan bir çizgi grafiği: onlardan okunan values'ın her biri için bir çizgi, x'in onlardan okuduğu yerler boyunca.

ParametreTürVarsayılanNe olduğu
dataList<T>satırlar, çizgilerin onlardan geçtiği sırayla.
x(T) -> Anybir satırın grafik boyunca nerede durduğu: bir ad, bir gün, kendisine eşit olan herhangi bir şey.
valuesList<ChartValue<T>>seriler: her birinin bir satırdan ne okuduğu, nasıl adlandırıldığı ve çizildiği.
modifierModifierModifiergrafiğin modifier'ı. Buradaki bir yükseklik grafiğindir, lejantınki de içinde.
curveChartCurveChartCurve.Linearher çizginin bir noktadan ötekine nasıl gittiği.
missingChartMissingChartMissing.Gapdeğeri olmayan bir satırda bir çizginin ne yaptığı.
labelsChartDataLabels?nulldeğerler, yerleri olduğunda, her çizginin noktalarının üstüne yazılır. null hiçbirini yazmaz.
xAxisChartAxis?ChartAxis()yerlerin ekseni, grafiğin altında. null ondan hiçbir şey çizmez.
yAxisChartAxis?ChartAxis()değerlerin ekseni, grafiğin yanında. null ondan hiçbir şey çizmez.
secondYAxisChartAxis?ChartAxis()grafiğin öbür yanındaki ikinci değer ekseni: bir değer onunla okunuyorsa çizilir (ChartValue.axis), okunmuyorsa çizilmez. null ondan hiçbir şey çizmez.
marksList<ChartMark>emptyList()serilerin yanında çizim alanına çizilen çizgiler ve bantlar: bir hedef, bir sınır, bir dizi yer.
legendChartLegend?ChartLegend()serilerin adlarının durduğu yer. null hiç göstermez.
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.
decimationChartDecimation?ChartDecimation()görünen noktaları çizim alanının yer bulduğundan çok olan bir çizginin, onların daha azından nasıl çizileceği. null her noktayı, kaç tane olursa olsun, çizer.
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 gizledikleri ve 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 değerle ç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.

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