Heatmap
Bir ısı haritası: hücrelerden bir ızgara, her hücre değerinin ne kadar olduğunu söyleyen bir tonda. İki adı ve bir sayısı olan şeye yakışır: haftanın günlerinin saatleri, birkaç yılın ayları, bir listenin ötekiyle karşılaştırılması. Neyin çok, neyin az olduğu bir bakışta görülür; aynı sayıların tablosunu ise okumak gerekir.
import com.pantrixui.components.chart.heatmap.PantrixHeatmap
- Ölçek.
HeatmapScalebir değerin tona nasıl çevrileceğini söyler: iki ucu (min,max; verilmezse değerlerin en küçüğü ve en büyüğü), kaç tonu olduğu (steps; sıfırsa her değerin kendi tonu) ve rengi (color). Tek renkte ton, rengin grafiğin durduğu zeminin üstündeki payıdır: açık temada da koyu temada da okunur.lowverilirse ölçek en küçüğün rengilow'dancolor'a gider; aradaki tonlar iki rengin Oklab'da karışımıdır, her adım bir öncekiyle aynı ölçüde değişir. - Hücredeki değer.
labelsile her hücreye değeri yazılır, tonunun üstünde daha iyi okunan siyah ya da beyazla; sığmadığı hücrede yazılmaz. - Ölçek çubuğu.
legend, ton ölçeğinin nerede duracağını söyler: uçlarında en küçük ve en büyük değer yazar. - Adlar.
xAxiskolonların,yAxissatırların adlarıdır: yazılsın mı (labels), nasıl yazılsın (label). Sığmayan ad bir kuralla atlanır. - Gösterilen hücre. İmlecin altındaki ya da dokunulan hücre çerçevelenir ve tooltip kolonunu, satırını ve değerini yazar.
- Durum ve basmak. Gösterilen hücre
ChartState'te,x'i verinin listedeki yeri olan bir seçim olarak durur.onSelectbasılan hücreyi verir:labelkolonu,namesatırı,valuedeğeri. - Yön. Sağdan sola okunan dilde kolonlar sağdan başlar, satır adları sağa yazılır.
- Dışa aktarma.
exportgrafiğin üstüne bir düğme koyar: grafik ekrandaki hâliyle, gösterilen yer ve tooltip olmadan, PNG, SVG ya da PDF dosyası olarak üretilir ve uygulamaya verilir. - Otomasyon.
Heatmap_<tagKey>; hücreler.Plot, bir hücre.Cell_<sıra>, ölçek.Legend, tooltip.Tooltip.
Örnekler
Haftanın saatleri
Bir mağazanın bir haftalık ziyaretçisi, günlere ve günün dilimlerine göre. Koyu hücre kalabalık saattir.
İmleci bir hücrenin üstüne getir ya da dokun: tooltip o günün o saatindeki ziyaretçiyi yazar.
PantrixHeatmap(
data = weekVisits(),
x = { it.hours },
y = { it.day },
value = { it.visits },
description = "Güne ve saate göre ziyaret",
tagKey = "plain"
)
internal fun weekVisits(): List<SlotVisits> {
val days = listOf("Pzt", "Sal", "Çar", "Per", "Cum", "Cmt", "Paz")
val hours = listOf("09", "11", "13", "15", "17", "19")
val visits = listOf(
listOf(12, 18, 34, 22, 41, 30),
listOf(10, 16, 31, 20, 38, 28),
listOf(14, 21, 36, 25, 44, 33),
listOf(11, 19, 35, 27, 47, 36),
listOf(16, 24, 42, 31, 58, 52),
listOf(28, 45, 61, 66, 72, 57),
listOf(22, 39, 54, 60, 49, 26)
)
return days.flatMapIndexed { day, name -> hours.mapIndexed { slot, at -> SlotVisits(name, at, visits[day][slot]) } }
}
internal class SlotVisits(
val day: String,
val hours: String,
val visits: Int
)
Beş ton, değerler yazılı
Sınav puanları, yüz üzerinden. Ölçeğin beş tonu var (steps): her yirmi puan bir ton. Değerler hücrelere yazılı (labels) ve ölçek grafiğin yanında duruyor. Sınava girmeyenin hücresi boş.
PantrixHeatmap(
data = examScores(),
x = { it.subject },
y = { it.student },
value = { it.score },
scale = HeatmapScale(min = 0.0, max = 100.0, steps = 5),
labels = ChartDataLabels(),
legend = ChartLegend(position = ChartLegendPosition.End),
description = "Öğrencilerin derslere göre puanları",
tagKey = "steps"
)
internal fun examScores(): List<ExamScore> {
val subjects = listOf("Matematik", "Fizik", "Kimya", "Tarih", "Dil")
val scores = mapOf(
"Ada" to listOf(92, 85, 78, 64, 88),
"Lin" to listOf(71, 58, null, 90, 95),
"Can" to listOf(45, 62, 70, 81, 39),
"Ece" to listOf(84, 97, 91, 55, 73)
)
return scores.flatMap { (student, row) ->
subjects.mapIndexed { at, subject -> ExamScore(student, subject, row[at]) }
}
}
internal class ExamScore(
val student: String,
val subject: String,
val score: Int?
)
İki renkli ölçek
İki renkli bir ölçek, sıcaklık gibi: en az ziyaret low renginde (uyarı renginin kabı), en çoğu color renginde (tehlike rengi); aradaki tonlar iki rengin Oklab'da karışımı. Renkler temadan alındığı için ölçek açık temada da koyu temada da okunur.
val colors = PantrixTheme.colors
PantrixHeatmap(
data = weekVisits(),
x = { it.hours },
y = { it.day },
value = { it.visits },
scale = HeatmapScale(low = colors.warning.container, color = colors.danger.color),
labels = ChartDataLabels(),
description = "Güne ve saate göre ziyaret",
tagKey = "two_colours"
)
internal fun weekVisits(): List<SlotVisits> {
val days = listOf("Pzt", "Sal", "Çar", "Per", "Cum", "Cmt", "Paz")
val hours = listOf("09", "11", "13", "15", "17", "19")
val visits = listOf(
listOf(12, 18, 34, 22, 41, 30),
listOf(10, 16, 31, 20, 38, 28),
listOf(14, 21, 36, 25, 44, 33),
listOf(11, 19, 35, 27, 47, 36),
listOf(16, 24, 42, 31, 58, 52),
listOf(28, 45, 61, 66, 72, 57),
listOf(22, 39, 54, 60, 49, 26)
)
return days.flatMapIndexed { day, name -> hours.mapIndexed { slot, at -> SlotVisits(name, at, visits[day][slot]) } }
}
internal class SlotVisits(
val day: String,
val hours: String,
val visits: Int
)
Bir hücreye basmak
onSelect, basılan hücreyi verir: bir hücreye bas ya da klavyeyle bir hücreye gidip Enter'a bas, kartın altındaki satır basılanı yazar. Ölçeğin kendi rengi var (HeatmapScale.color) ve ölçek çubuğu yok (legend = null).
val report = LocalExampleEvents.current
PantrixHeatmap(
data = weekVisits(),
x = { it.hours },
y = { it.day },
value = { it.visits },
scale = HeatmapScale(color = PantrixTheme.colors.success.color),
legend = null,
onSelect = { cell -> report("${cell.name}, ${cell.label}: ${cell.text}") },
description = "Güne ve saate göre ziyaret",
tagKey = "pressed"
)
internal fun weekVisits(): List<SlotVisits> {
val days = listOf("Pzt", "Sal", "Çar", "Per", "Cum", "Cmt", "Paz")
val hours = listOf("09", "11", "13", "15", "17", "19")
val visits = listOf(
listOf(12, 18, 34, 22, 41, 30),
listOf(10, 16, 31, 20, 38, 28),
listOf(14, 21, 36, 25, 44, 33),
listOf(11, 19, 35, 27, 47, 36),
listOf(16, 24, 42, 31, 58, 52),
listOf(28, 45, 61, 66, 72, 57),
listOf(22, 39, 54, 60, 49, 26)
)
return days.flatMapIndexed { day, name -> hours.mapIndexed { slot, at -> SlotVisits(name, at, visits[day][slot]) } }
}
internal class SlotVisits(
val day: String,
val hours: String,
val visits: Int
)
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.
Dosyada hücreler ve kenarlardaki adlar durur; renk ölçeği, ekranda nerede durursa dursun, dosyada hücrelerin altındadır.
var file by remember { mutableStateOf<ChartExportFile?>(null) }
PantrixHeatmap(
data = weekVisits(),
x = { it.hours },
y = { it.day },
value = { it.visits },
description = "Güne ve saate göre ziyaret",
tagKey = "exported",
export = ChartExport(fileName = "haftanin-saatleri") { file = it }
)
ExportedFile(file, tagKey = "exported")
internal fun weekVisits(): List<SlotVisits> {
val days = listOf("Pzt", "Sal", "Çar", "Per", "Cum", "Cmt", "Paz")
val hours = listOf("09", "11", "13", "15", "17", "19")
val visits = listOf(
listOf(12, 18, 34, 22, 41, 30),
listOf(10, 16, 31, 20, 38, 28),
listOf(14, 21, 36, 25, 44, 33),
listOf(11, 19, 35, 27, 47, 36),
listOf(16, 24, 42, 31, 58, 52),
listOf(28, 45, 61, 66, 72, 57),
listOf(22, 39, 54, 60, 49, 26)
)
return days.flatMapIndexed { day, name -> hours.mapIndexed { slot, at -> SlotVisits(name, at, visits[day][slot]) } }
}
internal class SlotVisits(
val day: String,
val hours: String,
val visits: Int
)
API
data
Bir ısı haritası: hücrelerden bir ızgara, her hücre değerinin ne kadar olduğunu söyleyen bir tonda. İki adı ve bir sayısı olan şeye yakışır: haftanın günlerinin saatleri, birkaç yılın ayları, bir listenin ötekiyle karşılaştırılması. Neyin çok, neyin az olduğu bir bakışta görülür; aynı sayıların tablosunu ise okumak gerekir.
| Parametre | Tür | Varsayılan | Ne olduğu |
|---|---|---|---|
data | List<T> | veri, değeri olan her hücre için bir veri. | |
x | (T) -> Any | bir verinin durduğu kolon: bir ad, bir saat, kendine eşit olan herhangi bir şey. | |
y | (T) -> Any | satırı, aynı biçimde. | |
value | (T) -> Number? | değeri, yoksa null. | |
modifier | Modifier | Modifier | grafiğin modifier'ı. Buradaki bir yükseklik grafiğindir, ölçeğinki de içinde. |
xAxis | ChartAxis? | ChartAxis() | kolonlar: adlarının hücrelerin altına yazılıp yazılmadığı (labels) ve bir adın nasıl yazıldığı (label). Başka hiçbir şeyi okunmaz. null hiç yazmaz. |
yAxis | ChartAxis? | ChartAxis() | satırlar: adlarının hücrelerin yanına yazılıp yazılmadığı ve nasıl yazıldığı. null hiç yazmaz. |
scale | HeatmapScale | HeatmapScale() | bir değerin nasıl bir tona dönüştüğü. |
labels | ChartDataLabels? | null | hücrelere yazılan değerler; her biri, hücrede yeri varsa, tonunun üstünde daha iyi okunan siyah ya da beyazla. null hiç yazmaz. |
legend | ChartLegend? | ChartLegend() | ton ölçeğinin durduğu yer. null hiç göstermez. Bir ölçeğin grafikten çıkaracağı bir şey yoktur: yalnızca durduğu yer okunur. |
tooltip | ChartTooltip? | ChartTooltip() | gösterilen hücre için gösterilen: başlık olarak kolonu, altında da satırı ve format'ın söylediği gibi yazılan değeri. Bir hücrenin paylaşacağı bir yeri ve içinden geçen bir çizgisi yoktur: shared ve crosshair okunmaz. null hiç göstermez. |
empty | (@Composable () -> Unit)? | null | grafiğin çizecek değeri yokken 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. |
state | ChartState | rememberChartState() | okuyucunun gösterdiği yer: verilmezse grafiğin kendisininki. |
description | String? | null | grafiğin ne gösterdiği, birkaç sözcükle, ekran okuyucu için: grafik hakkında söylediği ilk şey. Verilmezse grafik satırlarının adlarıyla duyurulur. |
onSelect | ((ChartPoint) -> Unit)? | null | basılan hücreyle çağrılır: x'i verinin data içindeki sıfırdan sayılan yeri, label'ı kolonu, name'i satırı, value'su değeridir. |
style | ChartStyle? | null | bu grafiğin kendi geometrisi: burada verilen alanlar, gerisi için temanınkiler. İki hücrenin arası sliceGap kadardır, köşeleri de barRadius'un söylediği kadar yuvarlaktır. |
colors | ChartColors? | null | bu grafiğin kendi renkleri, temanınkiler olmadıkları yerde. |
tagKey | String? | null | grafiğin otomasyon anahtarı: grafik Heatmap_<tagKey>, hücrelerinin tamamı Heatmap_<tagKey>.Plot, bir hücre, dolu hücreler arasında satır satır birden sayılarak, Heatmap_<tagKey>.Cell_<number>, ölçek Heatmap_<tagKey>.Legend ve tooltip Heatmap_<tagKey>.Tooltip olur. Bir hücreye basış, verinin sıra numarasıyla bir Heatmap select olayı olarak bildirilir. Değerlerden hiçbir şey bildirilmez. |
export | ChartExport? | null | grafiğ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. Renklerin ölçeği dosyada hücrelerin altında durur. |
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ığı.
| Parametre | Tür | Varsayılan | Ne olduğu |
|---|---|---|---|
height | Dp | Dp.Unspecified | Grafiğ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. |
lineWidth | Dp | Dp.Unspecified | Bir serinin çizgisinin kalınlığı. |
markerSize | Dp | Dp.Unspecified | Bir noktadaki işaretin genişliği ve yüksekliği. |
selectedMarkerSize | Dp | Dp.Unspecified | Aynısı, gösterilen noktadaki işaret için. |
gridWidth | Dp | Dp.Unspecified | Kılavuz çizgilerinin, eksenler boyunca çizilen çizgilerin ve gösterilen yeri işaretleyen çizginin kalınlığı. Sıfır hiçbirini çizmez. |
labelGap | Dp | Dp.Unspecified | Çizim alanıyla yanına ve altına yazılanın arası, ve onunla bir eksenin başlığının arası. |
tickSpacing | Dp | Dp.Unspecified | Değ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. |
legendGap | Dp | Dp.Unspecified | Lejantla yanında durduğu grafiğin arası. |
legendItemGap | Dp | Dp.Unspecified | Lejantın bir kaydıyla sonrakinin arası. |
swatchSize | Dp | Dp.Unspecified | Bir serinin lejanttaki ve tooltip'teki örneğinin ne kadar geniş olduğu: çizgisinin kısa bir parçası ya da dolgusunun bir yaması. |
swatchGap | Dp | Dp.Unspecified | O örnekle ardındaki adın arası. |
tooltipShape | ShapeSpec | ShapeSpec.Unspecified | Tooltip'in köşeleri: markanın şekil ölçeğinin bir basamağı ya da sabit bir şekil. |
tooltipHorizontalPadding | Dp | Dp.Unspecified | Tooltip'in yanlarıyla içindekinin arası. |
tooltipVerticalPadding | Dp | Dp.Unspecified | Üstü ve altıyla içindekinin arası, ve başlığıyla satırlarının arası. |
tooltipGap | Dp | Dp.Unspecified | Gösterilen yerle yanındaki tooltip'in arası. |
tooltipElevation | Dp | Dp.Unspecified | Tooltip'in gölgesi. |
barGap | Dp | Dp.Unspecified | Bir yerde yan yana duran iki çubuğun arası. Bunun için fazla ince olan çubuklar daha yakın durur. |
barMaxWidth | Dp | Dp.Unspecified | Bir çubuğun en fazla ne kadar geniş olduğu, yerinin ne kadar yeri olursa olsun: üç yerli bir grafik üç kalas değildir. |
barRadius | Dp | Dp.Unspecified | Bir çubuğun ucunun, sıfırdan uzak ucunun, köşelerinin ne kadar yuvarlak olduğu. |
sliceGap | Dp | Dp.Unspecified | Bir pastanın yan yana duran iki dilimi arasında; pastanın ortasından kenarına kadar aynı genişlikte. |
selectedSliceOffset | Dp | Dp.Unspecified | Bir 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. |
gaugeWidth | Dp | Dp.Unspecified | Bir göstergenin yayının kalınlığı. Bir yay, yarıçapının yarısından kalın olmaz. |
meterHeight | Dp | Dp.Unspecified | Bir ölçüm grubunun çubuğunun yüksekliği. |
trackerHeight | Dp | Dp.Unspecified | Bir durum izleyicinin bloklarının yüksekliği. |
bubbleMinSize | Dp | Dp.Unspecified | Bir 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. |
bubbleMaxSize | Dp | Dp.Unspecified | En büyük balonunun genişliği: büyüklüğü grafiğin en büyüğü olanın. |
navigatorHeight | Dp | Dp.Unspecified | Zoom'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. |
barBandShare | Float | Float.NaN | Bir 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. |
markLineWidth | Dp | Dp.Unspecified | Bir 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. |
markBandAlpha | Float | Float.NaN | Bir işaretin bandının renginin ne kadarıyla çizildiği, sıfırdan bire: bant serilerin arkasında durur ve bir tondur. |
patterns | Boolean? | null | Bir 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ı. |
nodeWidth | Dp | Dp.Unspecified | Bir sankey düğümünün ne kadar geniş olduğu. |
nodeGap | Dp | Dp.Unspecified | Bir 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.
| Parametre | Tür | Varsayılan | Ne olduğu |
|---|---|---|---|
series | List<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. |
grid | Color | Color.Unspecified | Bir eksenin işaretlerinde grafik boyunca çizilen çizgiler. Temanın divider'ı. |
axis | Color | Color.Unspecified | Bir eksen boyunca çizilen çizgi. Temanın border'ı. |
label | Color | Color.Unspecified | Eksenlerin yanına yazılanlar: değerler, yerler ve eksenlerin başlıkları, bir de lejanttaki adlar. Temanın textSecondary'si. |
crosshair | Color | Color.Unspecified | Gösterilen yeri işaretleyen çizgi. Temanın borderHover'ı: içinden geçtiği kılavuz çizgilerinden güçlü, arkasında durduğu serilerden sessiz. |
tooltipContainer | Color | Color.Unspecified | Tooltip'in dolgusu. Temanın surface'i. |
tooltipBorder | Color | Color.Unspecified | Tooltip'in kenarı. Temanın border'ı. |
tooltipText | Color | Color.Unspecified | Tooltip'in başlığı ve değerleri. Temanın textPrimary'si. |
tooltipLabel | Color | Color.Unspecified | Tooltip'teki seri adları. Temanın textSecondary'si. |
rising | Color | Color.Unspecified | Yukarı giden bir değerin çizildiği renk: bir şelalenin ekleyen adımı. Temanın success'i. |
falling | Color | Color.Unspecified | Aşağı giden bir değerin çizildiği renk: bir şelalenin götüren adımı. Temanın danger'ı. |
Erişilebilirlik
- Klavye. Grafik, Tab için tek duraktır: oklar hücreden hücreye gider, boş hücreleri atlar; Home ve End ilk ve son hücreye gider, Escape bırakır, Enter ve boşluk gösterilen hücreye basar.
- Ekran okuyucu. Grafik
description'ını, ardından satır satır her hücreyi kolonu, satırı ve değeriyle söyler. İki yüzden çok hücresi olan grafik yalnızca açıklamasıyla anlatılır.