Как отобразить все метки х в R барплоте?

Это основной вопрос, но я не могу найти ответ. Я генерирую около 9 барплотов на одной панели, и каждый барплот имеет около 12 баров. Я предоставляю все 12 меток в моем входе, но R называет только альтернативные столбцы. Это, очевидно, связано с некоторыми настройками по умолчанию в R, которые необходимо изменить, но я не могу найти их.

 James02 апр. 2012 г., 20:55
Увеличьте холст

Ответы на вопрос(3)

вы можете (как я здесь) адаптировать один из примеров, приведенных в виньеткеgridBase пакет:

library(grid)
library(gridBase)

## Make some data with names long enough that barplot won't print them all
DD <- table(rpois(100, lambda=5))
names(DD) <- paste("long", names(DD), sep="_")

## Plot, but suppress the labels
midpts <- barplot(DD, col=rainbow(20), names.arg="")

## Use grid to add the labels    
vps <- baseViewports()
pushViewport(vps$inner, vps$figure, vps$plot)

grid.text(names(DD),
    x = unit(midpts, "native"), y=unit(-1, "lines"),
    just="right", rot=50)

popViewport(3)

 Josh O'Brien15 июл. 2017 г., 00:43
@Dirk Спасибо за комментарий Похоже, теперь вам нужно явно загрузитьсетка пакет. Я только что сделал это редактирование, и теперь оно работает как задумано.
 Dirk14 июл. 2017 г., 22:56
Хм. Я просто получаю "не могу найти функцию" pushViewport ", поэтому я думаю, что это старый
Решение Вопроса

las=2 внутриplot() вызов. В противном случае вам нужно будет использоватьxaxt="n" а затем вставьте метки с отдельным вызовомaxis(1, at= ..., labels=...).

Другой метод - сначала собрать средние точки, а затем использовать text () с xpd и srt, чтобы контролировать степень поворота текста:

text(x=midpts, y=-2, names(DD), cex=0.8, srt=45, xpd=TRUE)

Значение y должно быть выбрано с использованием координат в построенной области.

 Josh O'Brien02 апр. 2012 г., 21:13
las=2 предложение работает, ноaxis(...) не делает.axis() это то, что используетсяbarplot() на первом месте; когда он вызывается сам по себе, он снова «изо всех сил старается не рисовать перекрывающиеся метки тиков», (как?axis положи это).
 FistOfFury03 дек. 2018 г., 14:29
чтобы уточнить для будущих читателей, которые не знают, что делают эти аргументы: las = 2 поворачивает метки против часовой стрелки на 90 градусов. Более того, если вам нужно уменьшить шрифт, вы можете использовать cex.names = .5, чтобы уменьшить размер
 user276002 апр. 2012 г., 21:01
las = 2, отлично работает и особенно полезен с таким количеством баров
 42-02 апр. 2012 г., 21:53
Это зависит от конкретного случая. В случае, если вы предложили этот код добавляет метки на каждом тике:axis(1, at = midpts, labels=names(DD), cex.axis=0.7)
 jul63526 нояб. 2014 г., 11:00
xaxt = "" не работает. Скорее используйте xaxt = "n".

Я бы предложил попробовать повернуть метки по вертикали, передав аргумент las = 2 вашей функции построения графиков.

Если метки все еще слишком велики, вы можете попробовать уменьшить шрифт, используя аргумент cex.names = .5.

Пример данных для участка

sample_curve <- c(2.31,2.34,2.37,2.52,2.69,2.81,2.83,2.85,2.94, 3.03,  3.21,  3.33)   # create a sample curve
names(sample_curve)<-c("1 MO","2 MO","3 MO","6 MO","1 YR","2 YR","3 YR","5 YR","7 YR","10 YR","20 YR","30 YR") # label the curve

Пример сюжета с слишком большими метками

barplot(sample_curve) # labels too big for the plot

Пример участка с метками повернутыми и маленькими

barplot(sample_curve, las=2, cex.names=.5) # lables are rotated and smaller, so they fit

Ваш ответ на вопрос