【问题标题】:Scatterplots in R ggplot2 package: moving axes and changing font label sizesR ggplot2 包中的散点图:移动轴和更改字体标签大小
【发布时间】:2015-09-13 14:49:45
【问题描述】:

我正在尝试使用 ggplot2 复制以下图表

我想对该图表进行的一项更改是为每个点及其标签赋予颜色。到目前为止,这是我尝试过的:

library(ggplot2)
library(directlabels)
Z <- c("Label1", "Label2", "Label3", "Label4", "Label5", "Label6", "Label7",        
"Label8", "Label9", "Label10", "Label11", "Label12", "Label13", "Label14",
"Label15", "Label16", "Label17", "Label18", "Label19", "Label20", "Label21",
"Label22", "Label23", "Label24")

X <- c(10.32582421, 9.772686421, -13.99202201, 3.803952545, 7.775395482,
-11.82234956, -24.27906403, -6.864457678, -24.62853773, 15.3562638,
-6.476057462, 9.576414602, -5.504090215, 29.74512913, 9.046116821,
15.79954557, -39.61679645, -0.90307239, 21.12503086, 15.30221473, 
13.40781808, -6.803226537, -4.045907666, -0.134057007)

Y <- c(0.037608141, 0.010581738, 0.117730985, 0.022347258, 0.069347278, 
0.026699666, 0.028739498, 0.040611306, 0.036626248, 0.034854158,
0.039310836, 0.03122964, 0.009422296, 0.021935924, 0.050006846, 
0.036285691, 0.016796701, 0.057764277, 0.028421772, 0.042726693,
0.037513217, 0.058422072, 0.066859355, 0.078158403)

mychart <- data.frame(Z, X, Y)

q <- ggplot(mychart, aes(X, Y)) + geom_point(aes(colour = Z)) + theme_bw()
direct.label(q)

我得到以下结果:

我无法弄清楚三件事:

  1. 我想删除灰色象限线。
  2. 我想移动坐标轴,使它们在图表中居中,图分布在 4 个象限中。
  3. 我想减小标签字体大小 - 我怀疑这就是为什么它们中的一些最终没有接近它们的点。

【问题讨论】:

  • (1) help("theme")。 (2) 要么查看geom_vline(),要么在没有边距的情况下分面; (3)help("apply.method")或使用geom_text()手动定位vsdirectlabel; (4) 你的答案是不可重复的。
  • 另见在线help for theme

标签: r ggplot2


【解决方案1】:
  1. theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(), panel.background = element_blank(), axis.line = element_line(colour = "black"))

  2. 使用 +xlim(min,max)+ylim(min,max) 设置绘图的轴限制。然后您可以使用+geom_hline(y=yvalue)+geom_vline(x=xvalue) 将水平线和垂直线添加到您的绘图中以指定四个象限。

  3. 不要使用+direct.label(q),而是使用+geom_text(aes(label=q,size=sizevalue),其中“sizevalue”是确定标签大小的数值(因此您可以对此进行试验)。

编辑:试试这个代码,它应该修复你的点标签。 (我不知道将轴标签向上移动到您绘制的线条的方法,也不知道将原始轴简单地移动到绘图中心的本地方法。对不起!):

ggplot(mychart, aes(X, Y)) + 
    geom_point(aes(colour = Z)) + 
    theme(panel.grid.major = element_blank(), 
          panel.grid.minor = element_blank(), 
          panel.background = element_blank(), 
          axis.line = element_line(colour = "black")) + 
    xlim(-40,40) + 
    ylim(0,0.12) + 
    geom_hline(y=0.04) + 
    geom_vline(y=0) + 
    geom_text(aes(x=X,y=Y+0.003,label=Z,color=Z)) + 
    theme(legend.position="none")

编辑 2:geom_text 中的抖动

ggplot(mychart, aes(X, Y, colour=Z)) + 
    geom_point() + 
    theme(panel.grid.major = element_blank(), 
          panel.grid.minor = element_blank(), 
          panel.background = element_blank(), 
          axis.line = element_line(colour = "black")) + 
    geom_text(aes(label=Z),
              position = position_jitter(width=2, height=0.005)) +
    xlim(-40,40) + 
    ylim(0,0.12) + 
    geom_hline(y=0.04) + 
    geom_vline(y=0) + 
    theme(legend.position="none")

【讨论】:

  • 谢谢。这是根据您的回答得出的结果:i.imgur.com/0xMgYra.jpg 我有几个问题。如何将轴标签移动到这些行?关于第 3 点,我收到以下错误:“一元运算符的参数无效”
  • 根据您展示的情节对我的回复添加了修复。让我知道该编辑是否适合您。
  • 感谢您的修复。这确实有点帮助。我使用 directlabels 包的命令 direct.label 的原因是修复重叠标签。还有另一种方法可以减少这种情况吗?当前输出图片:i.imgur.com/6xEMcwu.jpg
  • 是的,我无法让 directlabels 正常工作。但是,我在答案中添加了一个新的编辑,它提供了一个在 geom_text 中使用“jitter”的选项(你会想要弄乱抖动参数,看看你是否能得到一个适合你的图)。
  • 感谢您的所有帮助 rhozzy。在我看来,我们无法进一步改进它。归根结底,在确定避免重叠标签的最佳方法方面,没有任何算法可以与人眼相媲美。
猜你喜欢
  • 1970-01-01
  • 2018-07-20
  • 1970-01-01
  • 2012-09-12
  • 2013-02-03
  • 2022-09-28
  • 2016-04-25
  • 2014-02-19
  • 1970-01-01
相关资源
最近更新 更多