16

正規分布プロットと、0、10 ^ 0、10^1を表示する対数スケールのx軸を持つヒストグラムプロットがあります...メジャーティックの間にマイナーティックを含めたいと思います。実際、前の質問で与えられた解決策を使用して、メジャーティックの形式を1、2、3などから10 ^ 0、10 ^ 1、10 ^ 2、10^3に変更することができました。私は主要な目盛りに次のコードを使用しました:

major.ticks <- axTicks(1)
labels <- sapply(major.ticks,function(i)
            as.expression(bquote(10^ .(i)))
          )
axis(1,at=major.ticks,labels=labels)

これを編集して、マイナーティックにラベルを付けずにマークを付けることはできますか?

4

8 に答える 8

13

minor.tickパッケージには関数がありますが、その関数はHmisc対数目盛をうまく処理できません。対数目盛に従うマイナーティックを取得するには、次の関数を使用します。axは使用する軸(関数の場合と同じaxis)、nはマイナーティックの数(デフォルトは9)、t.ratioはメジャーティックとマイナーティックの比率であり、...追加のパラメーターをに渡すことができます。axis

編集:コメントのいいアイデアなので、関数を編集しました。2つの追加パラメーターがありmn対数スケールmxの最小値と最大値があります(したがって、最小値は10 ^ 0または1です!)mn=0

関数:

minor.ticks.axis <- function(ax,n,t.ratio=0.5,mn,mx,...){

  lims <- par("usr")
  if(ax %in%c(1,3)) lims <- lims[1:2] else lims[3:4]

  major.ticks <- pretty(lims,n=5)
  if(missing(mn)) mn <- min(major.ticks)
  if(missing(mx)) mx <- max(major.ticks)

  major.ticks <- major.ticks[major.ticks >= mn & major.ticks <= mx]

  labels <- sapply(major.ticks,function(i)
            as.expression(bquote(10^ .(i)))
          )
  axis(ax,at=major.ticks,labels=labels,...)

  n <- n+2
  minors <- log10(pretty(10^major.ticks[1:2],n))-major.ticks[1]
  minors <- minors[-c(1,n)]

  minor.ticks = c(outer(minors,major.ticks,`+`))
  minor.ticks <- minor.ticks[minor.ticks > mn & minor.ticks < mx]


  axis(ax,at=minor.ticks,tcl=par("tcl")*t.ratio,labels=FALSE)
}

これは次のように適用できます:

x <- 10^(0:8)
y <- 1:9
plot(log10(x),y,xaxt="n",xlab="x",xlim=c(0,9))
minor.ticks.axis(1,9,mn=0,mx=8)

与える:

ここに画像の説明を入力してください

于 2011-08-05T12:53:38.213 に答える
5

これに対する簡単な関数は次のとおりです。

log10.axis <- function(side, at, ...) {
    at.minor <- log10(outer(1:9, 10^(min(at):max(at))))
    lab <- sapply(at, function(i) as.expression(bquote(10^ .(i))))
    axis(side=side, at=at.minor, labels=NA, tcl=par("tcl")*0.5, ...)
    axis(side=side, at=at, labels=lab, ...)
}

次に例を示します。

x <- exp(rnorm(200, 5))
hist(log(x), 20, xaxt="n", xlim=c(0, 8))
log10.axis(1, at=seq(0, 8, 2))

与える: ここに画像の説明を入力してください

于 2016-02-05T16:07:53.203 に答える
2

magaxisパッケージmagicaxisで試してください。

于 2015-04-16T07:59:19.123 に答える
2

では、とと一緒にggplot2使用できます。以下は、上記のリンクから抜粋した例です。annotation_logticksscales::trans_breaksscales::trans_format

    library(ggplot2)

    a <- ggplot(msleep, aes(bodywt, brainwt)) +
      geom_point(na.rm = TRUE) +
      scale_x_log10(
        breaks = scales::trans_breaks("log10", function(x) 10^x),
        labels = scales::trans_format("log10", scales::math_format(10^.x))
      ) +
      scale_y_log10(
        breaks = scales::trans_breaks("log10", function(x) 10^x),
        labels = scales::trans_format("log10", scales::math_format(10^.x))
      ) +
      theme_bw()

    a + annotation_logticks() # Default: log ticks on bottom and left

ここに画像の説明を入力してください

于 2018-02-19T05:44:01.113 に答える
1

パッケージには、あらゆる種類のマイナーティックに使用できるminorAxis関数が含まれています。これは、対数ティックを作成する関数とStratigrapheR一緒に使用できます。seq_log

library(StratigrapheR)

x <- exp(rnorm(200, 5))
hist(log10(x), 20, xaxt="n", xlim=c(0, 4), xlab = "x", main = "Logarithmic Histogram of x")

ticks <- seq_log(10^0,10^4, divide = T)

lab <- sapply(0:4, function(i) as.expression(bquote(10^ .(i))))

minorAxis(1, at.maj = log10(ticks[[1]]), at.min = log10(ticks[[2]]), labels = lab)

与える:ここに画像の説明を入力してください

于 2019-08-21T12:15:11.507 に答える
0

""マイナーティックのラベルに使用します。

于 2011-08-05T11:47:44.937 に答える
0

小さなエラーがありました、

lims<-lims[3:4]行方不明だった

   minor.ticks.axis <- function(ax,n,t.ratio=0.5,mn,mx,...){

  lims <- par("usr")
  if(ax %in%c(1,3)) lims <- lims[1:2] else lims <- lims[3:4]

  major.ticks <- pretty(lims,n=5)
  if(missing(mn)) mn <- min(major.ticks)
  if(missing(mx)) mx <- max(major.ticks)

  major.ticks <- major.ticks[major.ticks >= mn & major.ticks <= mx]

  labels <- sapply(major.ticks,function(i)
            as.expression(bquote(10^ .(i)))
          )
  axis(ax,at=major.ticks,labels=labels,...)

  n <- n+2
  minors <- log10(pretty(10^major.ticks[1:2],n))-major.ticks[1]
  minors <- minors[-c(1,n)]

  minor.ticks = c(outer(minors,major.ticks,`+`))
  minor.ticks <- minor.ticks[minor.ticks > mn & minor.ticks < mx]


  axis(ax,at=minor.ticks,tcl=par("tcl")*t.ratio,labels=FALSE)
}
于 2017-04-29T20:46:56.747 に答える
0

このページの最初のプロットのx軸ラベルにエラーがあります。マイナーティックは適切に分散されていません。

于 2018-06-20T15:16:08.377 に答える