Bir grafik'ler için cazip doğrusal bir ölçek seçme Y Ekseni
Kod biraz bizim yazılım (ya da satırı) bir çubuk grafiği görüntülemek için yazıyorum. Her şey çok güzel gidiyor. Kafa karıştırdı şey Y ekseni etiketleme.
Arayan Y ölçek etiketli, ama bir "". çekici onları etiketlemek için tam olarak sıkışmış gibiyim istiyorlar nasıl söyleyebilir "Çekici", ve belki de, ama onu gördüğümüzde biliyoruz, değil mi? tarif edemem
Eğer veri noktaları ise:
15, 234, 140, 65, 90
Ve kullanıcı Y ekseni, kağıt ve kalem ile hile yapmaya çalışıyoruz biraz üzerinde 10 etiketleri ile gelir sorar:
0, 25, 50, 75, 100, 125, 150, 175, 200, 225, 250
10 (0 dahil), son kısım en yüksek değeri ötesine (234 < 250), "" 25 artış, her iyi. Eğer 8 etiketler istediler, 30 bir artış güzel görünebilirdi:
0, 30, 60, 90, 120, 150, 180, 210, 240
Dokuz zor olurdu. Belki de 10 ya da 8 kullanmış ve kapatın yeterli olur diyoruz. Ve ne puan bazı olumsuz değildir?
Excel güzel bu sorunu ele görebiliyorum.
Herkes genel amaçlı bir algoritma (hatta bazı kaba kuvvet Tamam) bunu çözmek için biliyor mu? Hızlı bir şekilde yapmak zorunda değilim, ama güzel görünmelidir.
CEVAP
O benim, uzun zaman önce O güzel bu örtülü bir grafik modülü yazdım. Gri kütle kazma şunları alır:
- Belirlemek, alt ve üst veri bağlı. (=Üst sınır alt sınır özel durum dikkat!
- Böl keneler gerekli miktarda Aralık.
- Yuvarlak tik kadar güzel miktarlarda aralığı.
- Alt ve üst bağlı buna göre ayarlayın.
Seni örnek alalım:
15, 234, 140, 65, 90 with 10 ticks
- alt = 15 bağlı
- üst = 234 bağlı
- = 234-15 = 219 aralığı
- kene = 21.9 aralığı. Bu 25.0 olmalıdır
- yeni alt tur = 0 = 25 * bağlı
- yeni üst sınır = 25 * (1) 235/25 = 250 tur
Bu yüzden aralığı = 0,25,50,...,225,250
Aşağıdaki adımları ile güzel kene aralığı:
- sonuç böyle 10^x böl 0.1 ve 1.0 arasında (0.1 hariç 1 dahil) yatıyor.
- tercüme buna göre:
- 0.1 ->0.1
- <= 0.2 ->0.2
- <= 0.25 ->0.25
- <= 0.3 ->0.3
- <= 0.4 ->0.4
- <= 0.5 ->0.5
- <= 0.6 ->0.6
- <= 0.7 ->0.7
- <= 0.75 ->0.75
- <= 0.8 ->0.8
- <= 0.9 ->0.9
- <= 1.0 ->1.0
- 10^x ile çarpın.
Bu durumda, 21.9 10^2 0.219 almak için bölünür. Bu &;= 0.25 lt 0.25 biz şimdi. 10^2 ile çarpılır bu 25 verir.
8 keneler ile aynı örneğe bir göz atalım:
15, 234, 140, 65, 90 with 8 ticks
- alt = 15 bağlı
- üst = 234 bağlı
- = 234-15 = 219 aralığı
- kene aralığı = 27.375
- 0.27375 veren, 0.3, tercüme etmek için 10^2 ile bölme (10^2 ile çarpılır) 30.
- yeni alt tur = 0 = 30 * bağlı
- bağlı = 30 * yuvarlak(1) 235/30 = 240 yeni üst
İstenen sonucu veren ;-).
------ KD tarafından eklendi------
İşte arama tabloları, vs. kullanmadan bu algoritma elde... kod:
double range = ...;
int tickCount = ...;
double unroundedTickSize = range/(tickCount-1);
double x = Math.ceil(Math.log10(unroundedTickSize)-1);
double pow10x = Math.pow(10, x);
double roundedTickRange = Math.ceil(unroundedTickSize / pow10x) * pow10x;
return roundedTickRange;
Genel olarak konuşursak, kene sayısı y ekseni gerçek kesimleri kene sayısı daha az yani alt kene içerir.

Sanal ölçek çıkmak için kısayol modu?...
Nasıl bir Görüntü ölçek için İmageView...
HTML WebSockets her müşteri için açık ...
Kaynak View/Gannt ekleme Fullcalendar ...
Grafik İki Keyfi Tepe Noktaları Arasın...