Funnel Chart
Bir huni: gittikçe daha azının geçtiği bir şeyin aşamaları, alt alta, her biri ona ulaşanların sayısı kadar geniş. Ötekilerin nerede kaybedildiğini gösterir: üye olan ziyaretçiler, deneyen üyeler, ödeyen deneyenler.
import com.pantrixui.components.chart.funnel.PantrixFunnelChart
- Biçim. En büyük aşama grafik kadar geniştir; her aşama, kendinden sonrakinin genişliğine doğru daralır ve aşamalar tek bir huni oluşturur. Sonuncu genişliğini korur. Kendinden öncekinden büyük olan aşama daralmaz, genişler: grafik kendisine verileni çizer.
shape = FunnelShape.Barsher aşamayı değeri kadar geniş bir çubuk olarak çizer;horizontalaşamaları satırların başladığı yandan yan yana dizer, her biri değeri kadar yüksektir. - Yazılar. Aşamanın adı ve değeri içine yazılır; değerin yanında payı durur: ilk aşamaya göre, bir öncekine göre ya da ikisi (
rate). Yazısına dar gelen aşamanın adı ve değeri yanına, yatay hunide altına yazılır; ikisine de yer yoksa yalnızca adı kalır.labels = nullhiçbir şey yazmaz. - Gösterilen aşama. İmlecin ya da parmağın satırında durduğu aşama bir halkayla işaretlenir ve tooltip onun adını, değerini ve payını yazar. Klavyede oklar aşamadan aşamaya geçer: yukarı ve aşağı, yatay hunide sağ ve sol.
- Renkler. Her aşama, sırasına göre temanın grafik renklerinden birini alır;
FunnelStage'incoloralanı bir aşamaya kendi rengini verir. - 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. Grafik
Funnel_<tagKey>, bir aşamaFunnel_<tagKey>.Stage_<numara>olarak etiketlenir. Bir aşamaya basış, aşamanın anahtarıyla birselectolayı olarak bildirilir.
Örnekler
Ziyaretten ödemeye
En yalın hâli: sırasıyla verilen aşamalar. Her aşamanın anahtarı, adı ve değeri vardır.
İmleci bir aşamanın satırına getir ya da aşamaya dokun: aşama halkalanır ve tooltip değerini, ilk aşamaya göre payıyla birlikte yazar.
PantrixFunnelChart(
stages = FUNNEL_STEPS,
description = "Bir ziyaretin ödemeye varana kadar geçtiği aşamalar",
tagKey = "plain"
)
private val FUNNEL_STEPS = listOf(
FunnelStage("visits", "Ziyaret", 3000),
FunnelStage("signups", "Üyelik", 1240),
FunnelStage("trials", "Deneme", 520),
FunnelStage("paid", "Ödeme", 310)
)
Biçim ve yön
Aşamaların biçimi ve yönü. "Çubuk" her aşamayı değeri kadar geniş bir çubuk olarak çizer (shape = FunnelShape.Bars); anahtarı çevir: aşamalar yan yana durur (horizontal = true), her biri değeri kadar yüksek. Klavyede oklar o zaman sağa ve sola gider.
var shape by remember { mutableStateOf(FunnelShape.Funnel) }
var horizontal by remember { mutableStateOf(false) }
PantrixSegmentButton(
options = FUNNEL_SHAPES,
selected = shape,
onSelect = { shape = it },
fullWidth = false,
tagKey = "funnel_shape"
)
PantrixSwitchButton(
checked = horizontal,
onCheckedChange = { horizontal = it },
label = "Yatay",
tagKey = "funnel_horizontal"
)
PantrixFunnelChart(
stages = FUNNEL_STEPS,
shape = shape,
horizontal = horizontal,
description = "Bir ziyaretin ödemeye varana kadar geçtiği aşamalar",
tagKey = "shape"
)
private val FUNNEL_STEPS = listOf(
FunnelStage("visits", "Ziyaret", 3000),
FunnelStage("signups", "Üyelik", 1240),
FunnelStage("trials", "Deneme", 520),
FunnelStage("paid", "Ödeme", 310)
)
private val FUNNEL_SHAPES = listOf(
SegmentOption(value = FunnelShape.Funnel, label = "Huni", tagKey = "funnel"),
SegmentOption(value = FunnelShape.Bars, label = "Çubuk", tagKey = "bars")
)
Dönüşüm oranları
Dönüşüm oranları (rate). "İlkine göre" her aşamanın ilk aşamadaki payını, "Öncekine göre" bir önceki aşamaya ulaşanların ne kadarının bu aşamaya geçtiğini, "İkisi" ikisini birden yazar. Aşamanın üstünde paylar yalın durur, ikisi bir noktayla ayrılır; tooltip ve ekran okuyucu her payın neye göre olduğunu söyler.
var rate by remember { mutableStateOf(FunnelRate.Previous) }
PantrixSegmentButton(
options = FUNNEL_RATES,
selected = rate,
onSelect = { rate = it },
fullWidth = false,
tagKey = "funnel_rate"
)
PantrixFunnelChart(
stages = FUNNEL_STEPS,
rate = rate,
description = "Bir ziyaretin ödemeye varana kadar geçtiği aşamalar, dönüşüm oranlarıyla",
tagKey = "rates"
)
private val FUNNEL_STEPS = listOf(
FunnelStage("visits", "Ziyaret", 3000),
FunnelStage("signups", "Üyelik", 1240),
FunnelStage("trials", "Deneme", 520),
FunnelStage("paid", "Ödeme", 310)
)
private val FUNNEL_RATES = listOf(
SegmentOption(value = FunnelRate.First, label = "İlkine göre", tagKey = "first"),
SegmentOption(value = FunnelRate.Previous, label = "Öncekine göre", tagKey = "previous"),
SegmentOption(value = FunnelRate.Both, label = "İkisi", tagKey = "both")
)
Kısa yazılan değerler
Büyük sayılar kısa yazılır (ChartDataLabels'ın format'ı): aşamaların içinde yer kalır. Anahtarı çevir: yazılar kalkar (labels = null) ve değerler yalnızca tooltip'te ve ekran okuyucuda durur.
var written by remember { mutableStateOf(true) }
val strings = PantrixTheme.strings
PantrixSwitchButton(
checked = written,
onCheckedChange = { written = it },
label = "Yazılar",
tagKey = "funnel_labels"
)
PantrixFunnelChart(
stages = CAMPAIGN_STEPS,
labels = if (written) ChartDataLabels(format = { strings.compact(it) }) else null,
description = "Bir kampanyanın gösterimden satışa aşamaları",
tagKey = "labels"
)
private val CAMPAIGN_STEPS = listOf(
FunnelStage("shown", "Gösterim", 1_250_000),
FunnelStage("clicks", "Tıklama", 410_000),
FunnelStage("carts", "Sepet", 96_000),
FunnelStage("orders", "Sipariş", 38_500),
FunnelStage("repeat", "Yeniden alan", 9_200)
)
Bir aşamaya basmak
Bir basış, aşamayı alır: anahtarı series'inde, adı name'inde, değeri value'sunda, grafiğin yazdığı metin text'indedir. Bir aşamaya bas: alttaki satır basılanı yazar.
var pressed by remember { mutableStateOf<String?>(null) }
PantrixFunnelChart(
stages = FUNNEL_STEPS,
onSelect = { pressed = "${it.name}: ${it.text}" },
description = "Bir ziyaretin ödemeye varana kadar geçtiği aşamalar",
tagKey = "press"
)
PantrixText(text = pressed ?: "Bir aşamaya bas")
private val FUNNEL_STEPS = listOf(
FunnelStage("visits", "Ziyaret", 3000),
FunnelStage("signups", "Üyelik", 1240),
FunnelStage("trials", "Deneme", 520),
FunnelStage("paid", "Ödeme", 310)
)
Genişleyen bir aşama
Bir aşama kendinden öncekinden büyük olabilir: aranan kişiler, başvuranlardan çok. Grafik sırayı da sayıyı da değiştirmez; o aşama daralmak yerine genişler ve payı yüzde yüzü geçer.
Son aşama yazısına dar geldiği için adı ve değeri yanında durur.
PantrixFunnelChart(
stages = listOf(
FunnelStage("leads", "Başvuru", 800),
FunnelStage("calls", "Arama", 950),
FunnelStage("offers", "Teklif", 300),
FunnelStage("won", "Satış", 40)
),
description = "Başvurudan satışa: aramalar başvurulardan çok",
tagKey = "widening"
)
Kendi renklerin
Aşamaların kendi renkleri: temanın bir rolü, aşamadan aşamaya açılarak. Her FunnelStage rengini kendi taşır; verilmeyen aşama sırasının grafik rengini alır.
val tone = PantrixTheme.colors.primary.color
PantrixFunnelChart(
stages = FUNNEL_STEPS.mapIndexed { place, stage ->
FunnelStage(stage.key, stage.name, stage.value, tone.copy(alpha = 1f - place * 0.2f))
},
description = "Bir ziyaretin ödemeye varana kadar geçtiği aşamalar, tek renkte",
tagKey = "own_colors"
)
private val FUNNEL_STEPS = listOf(
FunnelStage("visits", "Ziyaret", 3000),
FunnelStage("signups", "Üyelik", 1240),
FunnelStage("trials", "Deneme", 520),
FunnelStage("paid", "Ödeme", 310)
)
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 aşamalar, değerleri ve oranları durur.
var file by remember { mutableStateOf<ChartExportFile?>(null) }
PantrixFunnelChart(
stages = FUNNEL_STEPS,
description = "Bir ziyaretin ödemeye varana kadar geçtiği aşamalar",
tagKey = "exported",
export = ChartExport(fileName = "ziyaretten-odemeye") { file = it }
)
ExportedFile(file, tagKey = "exported")
private val FUNNEL_STEPS = listOf(
FunnelStage("visits", "Ziyaret", 3000),
FunnelStage("signups", "Üyelik", 1240),
FunnelStage("trials", "Deneme", 520),
FunnelStage("paid", "Ödeme", 310)
)
API
stages
Bir huni: gittikçe daha azının geçtiği bir şeyin aşamaları, alt alta, her biri ona ulaşanların sayısı kadar geniş. Ötekilerin nerede kaybedildiğini gösterir: üye olan ziyaretçiler, deneyen üyeler, ödeyen deneyenler.
| Parametre | Tür | Varsayılan | Ne olduğu |
|---|---|---|---|
stages | List<FunnelStage> | aşamalar, birbirini izledikleri sırayla. Anahtarları onları ayırır; aynı anahtarı taşıyan iki aşama reddedilir. | |
modifier | Modifier | Modifier | grafiğin modifier'ı. Buradaki bir yükseklik grafiğindir. |
labels | ChartDataLabels? | ChartDataLabels() | aşamalara yazılan: her aşamanın adı ve değeri, format'ın söylediği gibi ya da o bir şey söylemiyorsa temanın diliyle, paylarıyla. null hiçbir şey yazmaz. |
tooltip | ChartTooltip? | ChartTooltip() | gösterilen aşama için gösterilen: adı ve değeri, paylarıyla. İki pay yazılırken değer aşamanın satırında tek başına durur, her pay da altında kendi satırında; çağıranın kendi tooltip'ine bu satırlar, payla adlandırılmış, değeri pay olan ve yazısı olmayan birer aşama noktası olarak verilir. Bir aşamanın paylaşılacak 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 aşamalarının adlarıyla duyurulur. |
onSelect | ((ChartPoint) -> Unit)? | null | basılan aşamayla çağrılır: anahtarı series'i ve x'idir, adı name'i ve label'ı, text'i de ardında paylarıyla değeridir. |
style | ChartStyle? | null | bu grafiğin kendi geometrisi: burada verilen alanlar, gerisi temanınkiyle. İki aşamanın arası bir sliceGap kadardır. |
colors | ChartColors? | null | bu grafiğin kendi renkleri, temanınkiler olmadıkları yerde. |
tagKey | String? | null | grafiğin otomasyon anahtarı: grafik Funnel_<tagKey>, aşamaları birlikte Funnel_<tagKey>.Plot, bir aşama birden sayılarak Funnel_<tagKey>.Stage_<number>, tooltip Funnel_<tagKey>.Tooltip'tir. Bir aşamaya basış, aşamanın anahtarıyla bir Funnel select olayı olarak bildirilir. Değerlerden hiçbir şey bildirilmez. |
shape | FunnelShape | FunnelShape.Funnel | aşamaların nasıl çizildiği: tek bir huni olarak ya da çubuklar olarak. |
horizontal | Boolean | false | aşamaların alt alta değil, satırların başladığı yandan yan yana durup durmadığı. |
rate | FunnelRate | FunnelRate.First | bir aşamanın değerinin hangi paylarla yazıldığı: ilk aşamaya göre, kendinden önceki aşamaya göre ya da ikisi. Aşamada değerin ardında ayraç içinde dururlar, ikisi bir noktayla ayrılır; tooltip ve ekran okuyucu için öncekine göre olan pay ve ikisinin her biri neye göre olduğunu söyler (PantrixStrings.shareOfFirst ve shareOfPrevious). |
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. |
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
- Ekran okuyucu. Önce grafiğin açıklaması, sonra sırasıyla her aşama: adı, değeri ve payları. İlk aşamaya göre pay tek başına yazılıyorsa çıplak okunur, öbür durumlarda her pay neyin payı olduğuyla.