R语言 对数刻度箱形图(如何保持y轴上的原始值?)

sqougxex  于 2023-07-31  发布在  其他
关注(0)|答案(1)|浏览(80)

我需要你的帮助。我有一个数据集,表示为一个40行12列的矩阵。我需要这些数据的对数箱形图。
我使用以下命令:

boxplot(log(data[,2:13]))

字符串
我得到了想要的图形,但是我希望Y轴的值是原始值,也就是说,指的是没有转换成log的数据。我该怎么做?
提前感谢!

jdgnovmf

jdgnovmf1#

我将从一些样本数据开始:

set.seed(42)
data <- data.frame(lapply(setNames(nm=letters[1:4]), function(ign) runif(100, 1, 10)))
head(data)
#          a        b        c        d
# 1 9.233254 6.636208 8.966059 5.353913
# 2 9.433679 2.954419 5.653999 5.001126
# 3 3.575256 2.949106 8.667379 1.543470
# 4 8.474029 4.500505 4.985166 3.947554
# 5 6.775710 9.482101 2.420921 8.905861
# 6 5.671864 9.663472 4.980922 9.375444

字符串
boxplot的文档包括

  • 命名参数是要传递给bxp的参数和图形参数... *

虽然不清楚什么是可用的,但确实建议一个读取bxp,其中包括:

Currently, ‘yaxs’ and ‘ylim’ are used ‘along the boxplot’,
          i.e., vertically, when ‘horizontal’ is false, and ‘xlim’
          horizontally.  ‘xaxt’, ‘yaxt’, ‘las’, ‘cex.axis’, ‘gap.axis’,
          and ‘col.axis’ are passed to axis, and ‘main’, ‘cex.main’,
          ‘col.main’, ‘sub’, ‘cex.sub’, ‘col.sub’, ‘xlab’, ‘ylab’,
          ‘cex.lab’, and ‘col.lab’ are passed to title.


不幸的是,我们不能用这个来控制y轴,所以我们使用yaxt="n"来抑制y轴的自动格式化(请参阅?par并阅读有关"xaxt""yaxt"的内容)。从那里,我们可以自己使用axis(...)

boxplot(log(data[,2:4]), yaxt = "n")
axis(2, at = axTicks(2), labels = round(exp(axTicks(2)), 2), las = 1)


x1c 0d1x的数据
有人可能会说十进制轴的刻度并不理想,我们也可以引入axisTicks

boxplot(log(data[,2:4]), yaxt = "n")
ax <- axisTicks(exp(par("usr")[3:4]), log = FALSE)
axis(2, at = log(ax), labels = ax, las = 1)



顺便说一句,也可以使用ggplot2,尽管它与基本图形有很大不同。首先,它确实受益于“长”数据,即从data的“宽”形式变为

datalong <- reshape2::melt(data, id.vars=c())
head(datalong,3); tail(datalong,3)
#   variable    value
# 1        a 9.233254
# 2        a 9.433679
# 3        a 3.575256
#     variable    value
# 398        d 9.162482
# 399        d 5.961255
# 400        d 1.680392


为此,我们可以有一些乐趣:

library(ggplot2)
ggplot(datalong, aes(variable, value)) +
  geom_boxplot() +
  coord_trans(y = "log")

(Oops,我没有继续我的例子省略第一列...这实际上只对尝试与原始代码保持一致有用。仅供参考,如果你想/需要在这个reshape2::melt操作中得到帮助,我建议你访问Reshaping data.frame from wide to long formatTransforming wide data to long format with multiple variables。有无数的参考资料、Q/A和其他地方可以了解ggplot2;我经常使用https://r-graph-gallery.com作为很好的例子。

相关问题