【问题标题】:ggplot: Log scale with linear labelsggplot:带有线性标签的对数刻度
【发布时间】:2018-01-17 18:34:21
【问题描述】:

我希望记录转换我的数据,但有一个轴,其线性值对应于对数刻度。例如,在 Iversen 和 Soskice 2002 的以下 PDF 的第 3 页中。数据已被转换,但为了便于阅读,标签采用其对应的线性值。

http://faculty.washington.edu/cadolph/vis/vishw1.pdf

这里是一些可重复的数据和我的情节开始:

set.seed(51)
data<-data.frame(country=letters[1:14], 
                 poverty=runif(14,min=1,max=100),
                 parties=runif(14,min=1,max=10))

ggplot(data, aes(parties, poverty))+
  geom_point(size=2)+
  scale_x_log10()

有什么想法吗?我见过其他类似的问题,但都没有有效的答案(例如Linear Ticks on a log plot in R's GGplot)。

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    scale_x_contineous 中尝试trans,它只变换轴。

    ggplot(data, aes(parties, poverty))+
        geom_point(size=2)+
        scale_x_continuous(
            trans = "log10",
            breaks = 1:10
        )
    

    【讨论】:

    • 您的图表和 OP 的唯一区别是 breaks = 1:10。用trans切换到scale_x_continuousscale_x_log10相比没有区别
    【解决方案2】:

    这与其他两个答案相似,但给你一些不同的东西:

    ggplot(data, aes(parties, poverty))+
      geom_point(size=2)+
      scale_x_log10(breaks = scales::log_breaks(n = 10)) +
      annotation_logticks(sides = "b")
    

    如果你想同时在 x 和 y 轴上,那么你需要添加:

     scale_y_log10(breaks = scales::log_breaks(n = 10))
    

    并在annotation_logticks() 函数中将sides = "b" 更改为sides = "bl"

    【讨论】:

      【解决方案3】:

      coord_trans 正是这样做的:

      ggplot(data, aes(parties, poverty))+
        geom_point(size=2)+
        coord_trans(x = 'log10')
      

      【讨论】:

        【解决方案4】:

        这就是breaks 参数所涵盖的内容(结帐?scale_x_log10)。

        对于您当前的问题,您可以将最后一行修改为:

        scale_x_log10(breaks = 1:999)
        

        scale_x_log10(breaks = 2*(1:999))  # just even numbers
        

        等等

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-08-11
          • 1970-01-01
          • 1970-01-01
          • 2021-06-14
          • 1970-01-01
          • 1970-01-01
          • 2022-06-16
          • 1970-01-01
          相关资源
          最近更新 更多