20

前文:後処理なしでRから出版物グレードのグラフィックを作成したい。私の研究所の他の研究者は、常にグラフィックソフトウェア(Adobe Illustratorなど)で後処理を実行します。私はこれを避けたいと思っています。

私の不満は、Rが負の数に正しいマイナス記号を使用していないことです(特にプロット軸で):

plot(-20:-1, rnorm(20) + 1 : 20)

負の数でプロット

(私はあなたの検討のために犯罪者を丸で囲みました。)

タイポグラフィオタクのように(それは本当です!私のキャリアCVをチェックしてください!)、これは受け入れられません。ここでは、正しいUnicode文字ᴍɪɴᴜꜱꜱɪɢɴ(U + 2212、“ −”)を使用する必要があります。私の友人は、公開前にAdobe Illustratorのすべてのマイナス記号を置き換えることでこれを達成していますが、これを達成するには、R内からより良い方法が必要だと思わずにはいられません。そして、すべての軸ラベルを手動で置き換えることを強制しないもの。

(私は現在ggplot2を使用していませんが、ggplot2でのみ機能するソリューションがあれば、喜んでそれを採用します。)

4

5 に答える 5

7

おそらく、デフォルトを受け入れるのではなく、軸とラベルを手動で描画しますか?

plot(-20:-1, rnorm(20) + 1 : 20, xaxt="n")
Axis(-20:-1, at=seq(-20,-5,5), side=1,
  labels=paste("\U2212",seq(20,5,-5),sep=""))

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

于 2013-02-08T20:55:30.447 に答える
5

Joshua Ulrichが提供する方法とほぼ同じですが、Rに軸の目盛りを計算させることができる点が異なります。

plot(-20:-1, rnorm(20) + 1 : 20, xaxt="n")
at <- axTicks(1, usr=par("usr")[1:2])
labs <- gsub("-", "\U2212", print.default(at))
axis(1, at=at, labels=labs)

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

于 2013-02-08T21:34:28.257 に答える
5

これがggplotでそれを行う方法です。デバイスはpdfUnicode記号をレンダリングしないため、cairo_pdf代わりに使用してください。

unicode_minus <- function(x) sub('^-', '\U2212', format(x))

# change the default scales
scale_x_continuous <- function(..., labels=unicode_minus)
                        ggplot2::scale_x_continuous(..., labels=labels)
scale_y_continuous <- function(..., labels=unicode_minus)
                        ggplot2::scale_y_continuous(..., labels=labels)

qplot(-20:-1, rnorm(20) + 1:20)
于 2014-01-23T16:30:02.857 に答える
3

これは、ラティスプロットの軸ラベルを修正するハックです。panel.axis()アイデアは、ほとんど/すべての高レベルのプロット関数によって呼び出される 低レベルの関数にコードを挿入することです。

ここに(上下に数行のコンテキストがあります)、次の呼び出しの後に「手動で」挿入するコードがありますlibrary(lattice); trace("panel.axis", edit=TRUE)

if (draw.labels && !is.null(labels)) {
    {
        labels <- gsub("-", "\U2212", labels)  ## <- My addition
        Encoding(labels) <- "UTF-8"            ## <- My addition
        just <- if (outside) 
            switch(side, bottom = if (rot[1] == 0) c("centre", 

at=より良いオプション(引数の正しい値を分割したら(そしてそれを行うためのいくつかの方法についてはここを参照してください))、これを実行することです:

library(lattice)

trace(what = "panel.axis",
      tracer = quote({labels <- gsub("-", "\U2212", labels)
                      Encoding(labels) <- "UTF-8"}),
      at = list(c(30,3,2,2)))

その後、私がチェックした多くの画面またはファイルグラフィックスデバイスのいずれかに、目盛りラベルの適切なマイナス記号が印刷されます

自分の画面デバイスで比較するには、すぐ上のコードブロックを実行してから、次の操作を行います。

xyplot(1:10 ~ -1:-10)
untrace("panel.axis")
windows()
xyplot(1:10 ~ -1:-10)
于 2013-02-09T03:44:33.287 に答える
3

新しいパッケージは、OPが要求することを正確に実行するように署名します。これがウェブサイトからの例です:

library(dplyr)
library(ggplot2)
library(ggrepel)

theme_set(theme_gray())
theme_update(panel.grid.minor = element_blank())

p <- 
  ggplot(sleep) +
  aes(group, extra) +
  geom_point() +
  xlab("Drug") +
  ylab("Extra Sleep (hours)")

label_hours <- function(mapping) {
  geom_text_repel(
    mapping,
    nudge_x       = -.1,
    direction     = "y",
    segment.size  = .4,
    segment.color = "grey75",
    hjust         = "right"
  )
}

p +
  label_hours(
    mapping = aes(
      label = case_when(
        group == 1 ~ signs(extra, accuracy = .1), # Unicode minuses
        group == 2 ~ number(extra, accuracy = .1) # ASCII minuses
      )
    )
  ) +
  scale_y_continuous(
    limits = c(-4, 6),
    breaks = seq(-4, 6),
    labels = signs_format(accuracy = .1) # Unicode, analogous to number_format() 
  )

これがウェブサイトのプロットです。

于 2020-04-03T13:21:15.963 に答える