2015-09-01 6 views
1

Я хотел бы сделать точечный сюжет и показать счетчик на осях у вместо denisty И есть ylim() настроить dynamciallyточка участка dynamcially управления ylim

library(ggplot2) 
d = data.frame(x = c(-.5,-.06,-.051,-.049,-.03,.02), color = c("red", "red", "red","green", "red","blue")) 
set.seed(1) 
#d= data.frame(x = rnorm(10)) 
binwidth= .025 
p=ggplot(d, aes(x = x)) + geom_dotplot(binwidth = binwidth, method="histodot") + coord_fixed(ratio=binwidth) 
p + ylim(0, ceiling(max(table(cut(p$data$x, (diff(range(p$data$x))/binwidth)))))*1.2) 

Есть ли способ, чтобы применить окрашивание, которое находится в столбце «цвет» в кадре данных?

Также изменяется размер сюжета при изменении переменной ширины бина. Измените переменную binwidth на .1, и вы увидите, что график станет больше. Есть ли способ, чтобы сюжет был одного размера?

Спасибо

ответ

0

Мы можем определить это число с

p = ggplot(d, aes(x = x)) + geom_dotplot(binwidth = .05, method="histodot") + coord_fixed(ratio=0.05) 

p + ylim(0, ceiling(max(table(cut(p$data$x, (diff(range(p$data$x))/0.05)))))*1.2) 

Find диапазон значений

diff(range(p$data$x))

разделите на binwidth или coord_fixed отношение найти количество сокращений

diff(range(p$data$x))/p$coordinates$ratio

Присвоить каждый номер в бункер на основе количества сокращений, определенного выше

cut(p$data$x, diff(range(p$data$x))/p$coordinates$ratio)

Найти бункер с максимальным количеством наблюдений. Это число может не совпадать с сюжетом, но это не должно быть проблемой.

ceiling(max(table(cut(p$data$x, (diff(range(p$data$x))/0.05)))))*1.2

+0

Благодаря @Vlo но что р $ данных $ х. Можете ли вы применить это к моему примеру, где я называю ylim (0,100)? – user3022875

+0

@ user3022875 О, 'p = ggplot (ваш график)' сохраняется в переменной без 'ylim'. Вы можете применить умножение на скалере на последнем шаге для некоторой настройки. Это работает большую часть времени, основываясь на моих тестах. – Vlo

+0

, если p = ggplot, тогда график будет неправильным. Вы хотите сделать это дважды? один раз, чтобы получить p и другое время, чтобы вычислить этот потолок от p, а затем еще один ggplot с правильным масштабированием? – user3022875