Объединенный столбчатый график и линейный график с различными осями Y - PullRequest
2 голосов
/ 25 апреля 2011

Можно ли создать комбинированный граф столбцов и линейный график с другой осью Y, как в Excel?Я хочу автоматизировать создание графиков, где линейный график - это отношение Good-Bad, а гистограмма - это процент юниверса для заданного интервала другой переменной.Левая ось Y будет для отношения Хорошо - Плохо, а правая ось Y будет процентом вселенной.Я хотел бы сделать это с решеткой, но любые рекомендации будут оценены.

Ответы [ 3 ]

4 голосов
/ 25 апреля 2011
require(plotrix)  # followed by a slight variation of the first example of twoord.plot
twoord.plot(2:10,seq(3,7,by=0.5)+rnorm(9), type=c("bar", "l"),
   1:15,rev(60:74)+rnorm(15),xlab="Sequence",
   ylab="Ascending values",rylab="Descending values",
   main="Plot with two ordinates - points and lines")

Кажется, есть проблема с форматированием комментариев, поэтому я также размещаю код здесь. Векторы rx и lx должны быть числовыми, но для правильной маркировки можно использовать аргумент xticklab:

twoord.plot(lx=1:10, ly= df$Pct, rx=1:10, ry= df$Rate, type=c('bar','l'), 
xticklab=df$Segment, xlab='Segment', ylab='Percent of Good', rylab='Good Rate')
1 голос
/ 24 февраля 2012

Я знаю, что на этот вопрос уже есть принятый ответ, но я просто хотел добавить еще один вариант.Если вы оказались в ситуации, когда ваши возможности за пределами «базового» R ограничены (например, если вы работаете в разрозненной команде людей и нуждаетесь в максимально возможной совместимости кода, в ситуации, в которой я недавно оказался), вы всегда можетеиспользуйте команду

par(new=TRUE)

, чтобы построить один график поверх другого, то есть барплот и линейный график.Хитрость здесь (благодаря этому посту ) состоит в том, чтобы использовать «plot» как для линейных, так и для линейчатых диаграмм, просто используйте «type = 'h'» и опции «lend» и «lwd» для созданиябарплот с линейного участка.

Это повторяет код выше, используя только «базовые» функции:

## Set up data
line.x <- 2:10
bar.x <- 2:10
bar.y <- seq(3,7,by=0.5)+rnorm(9)
bar.x <- 1:15
bar.x <- 2:10
line.x <- 1:15
line.y <- rev(60:74)+rnorm(15)
x.range <- range(bar.x, line.x)

## Plot the data
par(mar=c(5,4,4,4)+0.1)    ## Make enough room for both labels
plot(y=bar.y, x=bar.x, type='h', lwd=25, lend=4, xlim=x.range, xlab="Sequence", ylab="", main="Plot with two ordinates - points and lines")
par(new=TRUE)
plot(y=line.y, x=line.x, col='red', type='l', xlim=x.range, axes=FALSE, xlab='', ylab='')

## Set up the axes and labels
axis(side=4, col='red', labels=FALSE)
at = axTicks(4)
mtext(side = 4, text = at, at = at, col = "red", line = 1) 
## Add x-axis labels; this allows customization of the how far out labels are
mtext(text='Descending values', side=4, line=2, col='red')
mtext(text='Ascending values', side=2, line=2)
0 голосов
/ 25 апреля 2011

Если вы хотите сделать это вручную, посмотрите на функцию updateusr в пакете TeachingDemos.

Это работает только с базовой графикой, а не с решеткой.

...