Czy istnieje możliwość ograniczenia liczby wyświetlanych na wykresie liczb całkowitych d3.svg.axis? Weźmy na przykład ten wykres. Tutaj jest tylko 5 rozmiarów: [0, 1, 2, 3, 4]
. Jednak tyknięcia są również wyświetlane dla .5, 1.5, 2.5
i 3.5
.Jak ograniczyć d3.svg.axis do etykiet całkowitych?
Odpowiedz
Powinieneś być w stanie wykorzystać d3.format
zamiast pisać własne funkcja formatu dla tego.
d3.svg.axis()
.tickFormat(d3.format("d"));
Można również użyć tickFormat
na skalę, która oś automatycznie użyje domyślnie.
zdałem sobie sprawę, że to wystarczy, aby ukryć te wartości, zamiast całkowicie wykluczyć. Można to zrobić za pomocą tickFormat
(https://github.com/mbostock/d3/wiki/Formatting#wiki-d3_format) jako takie:
d3.svg.axis()
.tickFormat(function(e){
if(Math.floor(e) != e)
{
return;
}
return e;
});
Używanie d3.format("d")
jako tickFormat może nie działać we wszystkich scenariuszach (see this bug). W przypadku urządzeń z systemem Windows Phone (i prawdopodobnie innych) niedokładne obliczenia mogą prowadzić do sytuacji, w których znaczniki nie są poprawnie wykrywane jako liczby całkowite, i. mi. znacznik "3" może być wewnętrznie zapisany jako 2.9999999999997, który dla d3.format("d")
nie jest liczbą całkowitą.
W rezultacie oś nie jest wyświetlana wcale. To zachowanie szczególnie uwidacznia się w zakresach od 1 do 10.
Jednym z możliwych rozwiązań jest tolerowanie błędu maszyny poprzez określenie wartości epsilon. Wartości nie muszą być dokładne liczby całkowite w ten sposób, ale może różnić się od najbliższej liczby całkowitej do zakresu epsilon (który powinien być sposób niższy niż błąd danych):
var epsilon = Math.pow(10,-7);
var axis = d3.svg.axis().tickFormat(function(d) {
if (((d - Math.floor(d)) > epsilon) && ((Math.ceil(d) -d) > epsilon))
return;
return d;
}
Innym rozwiązaniem, które jest również wymienionym w innych wątkach należy określić stałą liczbę znaczników, a następnie zaokrąglić liczbę zaznaczeń (która teraz powinna być "prawie" liczbą całkowitą) do najbliższej liczby całkowitej. Musisz wiedzieć, maksymalną wartość danych dla tej pracy:
var axis = d3.svg.axis().ticks(dataMax).tickFormat(d3.format(".0f"))
- 1. Co to jest 'd3.svg.axis()' d3 w wersji 4?
- 2. znaczniki wyboru d3 na liczbach całkowitych tylko
- 3. Jak dodać nowe linie do etykiet na wykresach D3?
- 4. Wielopoziomowe/grupowanie etykiet osi przy użyciu d3
- 5. Jak dodać d3-selection-multi do d3?
- 6. Umieszczanie etykiet w środku węzłów w d3.js
- 7. Jak ograniczyć długość EditText do 7 liczb całkowitych i 2 miejsc po przecinku?
- 8. Jak ograniczyć JFileChooser do katalogu?
- 9. Jak ograniczyć EditText do wprowadzania wyłącznie wartości zmiennoprzecinkowych w Javie?
- 10. Jak dynamicznie tworzyć wiele etykiet i pól tekstowych w zależności od wartości zmiennej liczb całkowitych?
- 11. Jak napisać liczb całkowitych do pliku
- 12. Jak uniknąć etykiet wejść
- 13. Jak ograniczyć widok tylko do superużytkownika?
- 14. Jak ograniczyć rejestrację do produktu w Firebase
- 15. Jak ograniczyć pole Int do zakresu wartości?
- 16. Jak mogę ograniczyć dostęp zdalny do Elmah?
- 17. Jak ograniczyć datownik terminala do dzisiaj?
- 18. HTML: Jak ograniczyć wysyłanie plików do zdjęć?
- 19. PowerShell: Jak ograniczyć ciąg do N znaków?
- 20. Jak ograniczyć PrimFaces inputMask tylko do liczb?
- 21. Jak ograniczyć iterator do bycia przyszłym iteratorem?
- 22. jak ograniczyć do trzech pętli foreach pętli
- 23. Jak ograniczyć komórkę tylko do numerów wejściowych
- 24. Jak ograniczyć dostęp do aktywnego administratorowi administratorami
- 25. Jak ograniczyć ciąg do określonej długości?
- 26. Jak ograniczyć JSpinnera
- 27. Konwersja Java do liczb całkowitych
- 28. Wstawianie przecinków do liczb całkowitych
- 29. Jak ograniczyć liczbę dziesiętną?
- 30. Jak ograniczyć szerokość tekstu?
użyteczne. Czy istnieje sposób, aby go również usunąć znaki podziałki? Format ukrywa liczby połówkowe, ale zachowuje półznaczniki. – IBBoard
@IBBoard wypróbuj coś takiego: 'axis.ticks (tickCountSetter (yMax))' gdzie yMax to pewna liczba, używając tej funkcji: 'function tickCountSetter (n) {if (n <= 2) {return n} else {return 10}} ' – s2t2