Controlar o comprimento da unidade de exibição de `PlotRange`

Dec 30 2020

Se eu tiver um exemplo de dados plotados, como:

ListPlot[{{-20, 2}, {-10, 1}, {10, 0.001}, {20, 0.0000001}, {80, 0.000000001}}, PlotRange -> {{-20, 80}, All}] 

Qual plotado dá:

Como posso usar PlotRangepara exibir o eixo x a cada 10 unidades em vez de a cada 20 unidades, como é por padrão?

Respostas

3 MarcoB Dec 30 2020 at 04:18

Aqui eu uso a Charting`ScaledTicks função não documentada :

ListPlot[
 {{-20, 2}, {-10, 1}, {10, 0.001}, {20, 0.0000001}, {80, 0.000000001}},
 PlotRange -> {{-20, 80}, All},
 Ticks -> {
    Charting`ScaledTicks[{Identity, Identity}][-20, 80, {10, 2}], 
    Automatic}
]

O que sei sobre essa função, aprendi principalmente nos comentários a esta resposta . Em resumo:

Charting`ScaledTicks[{scalingFunction, inverseScalingFunction}][min, max, divisions]

onde divisionspode ser um número, ou {maximum number of major ticks, number of divisions between each pair of major ticks}, então a especificação que usei acima pede marcações principais rotuladas a cada 10 unidades, com uma marcação secundária entre cada uma (ou seja, duas divisões entre cada marcação principal). Observe que às vezes o comportamento das divisões é peculiar; Presumo que use FindDivisionsou algo semelhante nos bastidores, que sempre tenta encontrar divisões "bonitas" / "boas" de acordo com uma heurística.