Как исправить недостающие метки в базе R барплота - PullRequest
0 голосов
/ 08 ноября 2019

Привет, я пытаюсь построить график количества посохов, однако некоторые метки на оси x отсутствуют. Как это исправить

> dput(dat)
structure(list(Name = c("John", "Jacky", "Jill", "Sam", "Arthur", 
"Aaron", "Jacob", "Joseph", "Martin", "Alan", "Albert", "Clare", 
"Frederick", "Florence", "David", "George", "Michael", "Doughlas", 
"Andrew", "Brian"), Clinc = c("DMMTC", "DMMTC", "DMMTC", "DMMTC", 
"CKDMTC", "CKDMTC", "CKDMTC", "CKDMTC", "Warfarin MTC", "Warfarin MTC", 
"Warfarin MTC", "Warfarin MTC", "Respiratory MTC", "Respiratory MTC", 
"QSC", "QSC", "QSC", "Pain MTC", "Pain MTC", "Pain MTC")), row.names = c(NA, 
-20L), class = c("tbl_df", "tbl", "data.frame"))

summary(dat)

head(dat)


counts <- table(dat$Clinc)
barplot(counts, main="Placements",
        xlab="number of staffs",)

Ответы [ 2 ]

1 голос
/ 08 ноября 2019

Anandapadmanathan, это чувствительно к фактическому размеру окна графика. Если вы расширите его до большего размера, вы должны увидеть все метки. Некоторые могут быть скрыты из-за перекрывающихся текстовых полей. Например, это ваш код, но с гораздо более широким окном печати. ​​

barplot

К сожалению, пока у меня нет простого решения, почемуили на вашем графике «отсутствуют» имена, у вас есть возможность произвольно добавлять метки.

Во-первых, знаете ли вы, что barplot возвращает значения X для центра каждого столбца? Как ни странно, они не являются целыми числами:

bp <- barplot(counts, main="Placements", xlab="number of staffs")
bp
#      [,1]
# [1,]  0.7
# [2,]  1.9
# [3,]  3.1
# [4,]  4.3
# [5,]  5.5
# [6,]  6.7

Мы можем использовать их для размещения текста вручную .

Начиная с слишком узкого графика:

# left, unchanged
bp <- barplot(counts, main="Placements", xlab="number of staffs")

Мы можем добавить текст вручную. Для этого знайте, что xpd=NA позволяет нам помещать текст (и точки) за пределы обычного окна черчения. Кроме того, adj= - это вектор «выравнивания по x» и «выравнивания по y», где 0,5 центрировано, и в этом случае -4 означает «понижение примерно на 4 высоты». Вам нужно будет поиграть с этим, чтобы получить то, что вы хотите. (См. ?par для справки по xpd и ?text для справки по adj.)

# middle, just for testing
bp <- barplot(counts, main="Placements", xlab="number of staffs")
text(bp, 0, names(counts), xpd = NA, adj = c(0.5, 4), col = "red")

Наконец, так как мы можемТеперь посмотрим, что это 2-й и 5-й ярлыки, которые мы опускаем, мы можем просто нацелить их.

# right, fixed
bp <- barplot(counts, main="Placements", xlab="number of staffs")
text(bp[c(2,5)], 0, names(counts)[c(2,5)], xpd = NA, adj = c(0.5, 4), col = "red")

three barplots side by side

Это идеально? Нет, это красиво? Возможно нет. Но это позволяет вам восстановить то, что вы потеряли. (Я лично чувствую, что изменение высоты x-меток может быть полезным, особенно когда некоторые из них шире, чем вы хотите.)

0 голосов
/ 08 ноября 2019

Вот еще четыре способа работы с метками, которые не отображаются:

  1. Уменьшить текст метки:

    barplot(counts, main="Placements", xlab="number of staffs", cex.names=.7)
    
  2. Изменитьразмер окна графика:

    dev.new(width=10, height=6)
    barplot(counts, main="Placements", xlab="number of staffs")
    
  3. Используйте горизонтальную линейную диаграмму, увеличив левое поле:

    oldp <- par(mar=c(5.1, 8.1, 2.1, 1.1))
    barplot(counts, main="Placements", xlab="number of staffs", horiz=TRUE, las=1)
    par(oldp)
    
  4. Увеличьтенижнее поле и нанесите текст под углом:

    out <- barplot(counts, main="Placements", names.arg="")
    title(xlab="number of staffs", line=4)
    text(out, rep(-.1, 6), names(counts), srt=45, pos=2, xpd=NA, cex=.75)
    
...