2010-09-28 4 views
5

есть ли способ в ggplot2, чтобы получить тип графика «b»? Смотрите пример:Получение типа R типа «b»

x <- c(1:5) 
y <- x 
plot(x,y,type="b") 

В идеале, я хочу, чтобы заменить точки на их значения, чтобы иметь что-то похожее на этот известный пример:

alt text

EDIT: Вот некоторые выборочные данные (я хочу сюжет каждый "кошка" в фаской с типом участка "б"):

`df <- data.frame(x=rep(1:5,9),y=c(0.02,0.04,0.07,0.09,0.11,0.13,0.16,0.18,0.2,0.22,0.24,0.27,0.29,0.31,0.33,0.36,0.38,0.4,0.42,0.44,0.47,0.49,0.51,0.53,0.56,0.58,0.6,0.62,0.64,0.67,0.69,0.71,0.73,0.76,0.78,0.8,0.82,0.84,0.87,0.89,0.91,0.93,0.96,0.98,1),cat=rep(paste("a",1:9,sep=""),each=5))` 

с уважением, Musa

+1

объединить geom.segment и geom.text, но почему бы вам использовать ggplot2, если вы можете легко сделать это в обычном режиме? –

+0

, потому что мне нужны некоторые другие средства ggplot, которые я не хотел упоминать, сосредоточившись на существенных ... – teucer

+0

Некоторые примеры данных действительно помогут решить эту проблему. – hadley

ответ

3

Там в экспериментальной Grob в gridExtra осуществить это в Grid-графики,

library(gridExtra) 
grid.newpage() ; grid.barbed(pch=5) 

enter image description here

+0

@baptiste предположим, что у меня уже есть сюжет «p», как я могу «добавить» его к сюжету (p + geom_barbed())? Я видел, что нет такой функции (geom_barbed) еще ... – teucer

+1

по какой-то причине я не включал эту строку в пакете, 'geom_barbed <- GeomBarbed $ build_accessor()' , который объясняет, почему 'geom_barbed 'не распознается (почему' qplot' работал для меня тайна) – baptiste

+0

@baptiste Thx! Отлично работает. Вы обновите пакет? – teucer

4

Настройте оси, рисуя график без какого-либо контента.

plot(x, y, type = "n") 

Затем используйте text, чтобы указать свои данные.

text(x, y, labels = y) 

Вы можете добавить сегменты линии с lines.

lines(x, y, col = "grey80") 

EDIT: Полностью не удалось указать упоминание о ggplot в вопросе. Попробуй это.

dfr <- data.frame(x = 1:5, y = 1:5) 
p <- ggplot(dfr, aes(x, y)) + 
    geom_text(aes(x, y, label = y)) + 
    geom_line(col = "grey80") 
p 

ДРУГОЕ ИЗМЕНЕНИЕ: Учитывая ваш новый набор данных и запрос, это то, что вам нужно.

ggplot(df, aes(x, y)) + geom_point() + geom_line() + facet_wrap(~cat) 

ДАЙТЕ ДРУГОЕ ИЗМЕНЕНИЕ: Мы начинаем подходить к реальному вопросу. Как и в том, «как вы делаете линии не совсем достигая очков».

Короткий ответ заключается в том, что это не стандартный способ сделать это в ggplot2. Правильный способ сделать это - использовать geom_segment и интерполировать между вашими точками данных. Однако это довольно много усилий, поэтому я предлагаю более легкий выдумки: нарисуйте большие белые круги вокруг ваших очков. Недостатком этого является то, что он делает линии сетки глупыми, поэтому вам придется избавиться от них.

ggplot(df, aes(x, y)) + 
    facet_wrap(~cat) + 
    geom_line() + 
    geom_point(size = 5, colour = "white") + 
    geom_point() + 
    opts(panel.background = theme_blank()) 
+0

версия ggplot не совсем то, что я хотел ... – teucer

+0

@Musa: Вопрос неоднозначен. Вы запрашиваете 'type =" b "', который является точками и строками, но изображение представляет собой текст и строки, что я вам дал. Задайте лучший вопрос, и вы получите лучший ответ. –

+0

@Richie: прежде всего thx для ваших усилий. Вопрос состоит в том, чтобы иметь тип «b» в ggplot, в конце это не имеет значения, если это точки и линии, тексты и строки.Я думаю, если бы у меня был тип, я мог бы легко заменить точки текстами (geom_point-> geom_text) – teucer

Смежные вопросы