我想用两个非线性但单调相关的值标记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()
答案 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