Quando adiciono linhas de grade a um gráfico de log, parece que todas as linhas de grade possíveis são adicionadas automaticamente e eu gostaria de incluir apenas as linhas principais. Tentei desligar os tiques menores, mas não surtiu efeito.
Por exemplo:
loglog([0.000001,0.1],[0.000001,0.1])
grid on
gca.YAxis.MinorTick = 'off'
Como posso ter apenas linhas de grade nas marcações dos eixos rotulados?
O
loglog
gráfico tem eixos incomuns, porque as marcas secundárias são habilitadas por padrão, como você normalmente esperaria das marcas principais. Portanto, esse comportamento dagrid
documentação é uma área cinzenta:Observe que a maioria dos gráficos na documentação para
loglog
usogrid on
mostram as grades secundárias (ish) como você está vendo, então duvido que esse seja um comportamento inesperado da perspectiva do MathWorks.Como não há como chamar
grid
enquanto desativa explicitamente as linhas de grade secundárias (como deveria ser o comportamento padrão), você terá que gerenciar as grades de forma mais granularset
após a criação dos eixos. Você pode ativar as grades principais e desabilitar as grades secundárias em um comando sem usargrid()
nenhum...Testado na atualização 5 do R2020b:
Editar : Pela conversa nos comentários, Luis sugeriu que
grid on, grid minor
deveria funcionar. No entanto, testar no R2020b isso não acontece. Chamar esses comandos em duas chamadas separadas funciona da mesma maneira que usarset
acima:Presumo que seja porque o buffer gráfico deve ser liberado antes dos
grid minor
trabalhos para remover as linhas de grade, talvez porque, caso contrário, não há nada para remover. Você poderia disfarçar isso como uma única linha usandodrawnow
para liberar o buffer, mas nesse ponto acho que recomendo apenas usar oset
mostrado acimaEspeculando, talvez o autor tenha
loglog
decidido que as grades menores com espaçamento variável fizeram o enredo parecer mais "logístico"? ou seja, é mais obviamente uma escala não linear.As grades seguem os ticks, então
te dar
As outras respostas fornecem soluções, mas não explicam por que seu código não funciona. Para maior clareza, deve-se notar primeiro que
gca
função fornece o objeto dos eixos atuais ;YAxis
deste último refere-se a um objeto de régua numérica , que é filho dos eixos.Existem dois problemas com seu código. O primeiro problema é que
não define uma propriedade da régua numérica dentro dos eixos atuais. Você não pode aplicar indexação de ponto diretamente a uma saída de função ; você precisa fazer um dos seguintes:
atribua-o primeiro a uma variável:
use parênteses (obrigado, @CrisLuengo !)
usar
get
eset
(mais complicado):O que seu código faz é criar uma estrutura chamada
gca
(sombrando assim a função com o mesmo nome) com o campo, subcampo e valor especificados. Nao é útil.O segundo problema é que a
MinorTick
propriedade da régua numérica afeta apenas as marcas secundárias, não as linhas de grade secundárias. O que você deseja definir é aYMinorGrid
propriedade dos eixos atuais. Então,faz o que você quer.