ggplot sec_axis我可以将向量用于反式公式吗?

时间:2018-12-11 22:36:04

标签: r ggplot2 plot axis-labels

我想用两个非线性但单调相关的值标记x轴。一个是十分位数,另一个是十分位数内的均值。由于两者之间没有代数变换,尽管我可以使用向量,但是ggplot给我一个错误消息,即该变换必须是单调的。如何检查,有没有办法做我尝试的事情?

df <- 
  data.frame(x = rnorm(500)) %>%
  mutate(y = 1 + 2 * x) %>%
  arrange(x) %>% 
  mutate(decile = ceiling(10 * 1:500 / 500)) %>% 
  group_by(decile) %>%
  summarize(x = mean(x), y = mean(y))

 sec_axis_label = df$x

df %>% 
  ggplot(aes(decile, y)) +
  scale_x_continuous(expand = c(0, 0), 
    sec.axis = sec_axis(~ sec_axis_label[.])) +  
   geom_point() 

1 个答案:

答案 0 :(得分:2)

def findDupesNum(listy): for i in listy: counts = {} for x in i: if x: counts[x] = counts.get(x, 0) + 1 doubles = 0 triples = 0 for i in counts: if counts[i] == 2: doubles = doubles + 1 elif counts[i] == 3: triples = triples + 1 print('{} doubles and {} triples'.format(doubles, triples)) 需要进行转换(公式),而不是查找。要查看发生了什么,我将对其进行如下更改:

sec_axis

我们可以探索并查看正在发生的事情:

sec_axis_label <- function(z) { browser() ; 1 ; }
df %>% 
   ggplot(aes(decile, y)) +
   scale_x_continuous(expand = c(0, 0), 
     sec.axis = sec_axis(~ sec_axis_label(.))) +  
   geom_point() 

它为您提供了足够的潜在值,以便转换将返回有意义的其他轴值范围,从而确定最佳的漂亮数字。

因此,我们需要进行各种转换。如果我们假设插值是安全的(我不知道它对您是否安全),我们可以这样做:

# Browse[2]> 
str(z)
#  num [1:1000] 1 1.01 1.02 1.03 1.04 ...
# Browse[2]> 
range(z)
# [1]  1 10
# Browse[2]>
Q

simple decile/sec_axis plot