【问题标题】:Pretty Axis with Min and Max labels带有最小值和最大值标签的漂亮轴
【发布时间】:2012-05-29 16:32:16
【问题描述】:

我想像这样画一个简单的条形图:

test <- data.frame(y=c(1,3,53,10,30,35,50), x=c(1:7))
barplot(test$y, names.arg=test$x)

我的问题是,如果最大值是某个“不漂亮”的数字,则 y 轴延伸得不够远。更好的是,如果轴扩展通过最大值并以大于最大值的某个“漂亮”值结束。

给定一个随机数据集(即这是一个函数),有没有一种简单的方法可以做到这一点?

【问题讨论】:

  • 我会为此使用ggplot。您需要基础 R 中的解决方案吗? 编辑 - 这在ggplot 中也不容易,尽管ggplot 在最高条上方绘制了一条网格线,使得读取值非常容易。
  • 我实际上确实需要 base R 中的解决方案,因为我将它合并到我自己的函数中,该函数将这个图表作为可视化的一部分。

标签: r axis-labels


【解决方案1】:

您可以结合使用pretty()range() 来自动为ylim 选择更好的设置:

test <- data.frame(y=c(1,3,53,10,30,35,50), x=c(1:7))
barplot(test$y, names.arg=test$x, 
        ylim = range(pretty(c(0, test$y))))

(感谢 Gavin Simpson 指出 range(pretty(c(0, test$y)))range(pretty(c(0, max(test$y))) 一样好用)

【讨论】:

  • 太美了!现在,绘制相同的图表,但使用x11(width=5,height=2.2) 作为输出设备。为什么打印标签“50”而不是标签“60”?
  • 在这种情况下,pretty(test$y) 就足够了——不需要调用max()
  • @GavinSimpson - 好点。我已经编辑了帖子以使用更简洁的版本。留下c(0, ...) 位只是为了在轴下限处购买的安全性。
  • @kikumbob -- 简短的版本是这样的设备并没有真正提供足够的空间来绘制条形图。有关随着设备大小变化而绘制刻度的原因/方式的更多详细信息,请参阅?axisDetails 部分。如果您必须在这么小的设备上绘图,您可能需要尝试各种 ?par 设置,包括设置 par(mar=c(2,2,1,1)) 或类似的设置。
猜你喜欢
  • 1970-01-01
  • 2013-02-02
  • 1970-01-01
  • 1970-01-01
  • 2019-12-16
  • 2017-06-02
  • 1970-01-01
  • 1970-01-01
  • 2015-05-13
相关资源
最近更新 更多