2016-12-06 2 views
1

Я использую qplot от ggplot2, чтобы сделать участок разброса. Я не могу видеть все значения по оси x. Кроме того, он удаляет NA по оси x. Как сохранить NA и контролировать количество функций, отображаемых по оси x?NA не отображается в ggplot2 chartplot с использованием qplot

rate_plot = qplot(Result$temp, Result$CR, main="Rate", xlab=feature, ylab="Rate", size=I(3))+ 
    scale_x_discrete(drop=FALSE) 

Plot looks like this

данные: Google Docs link

Result <- read.table(text = " temp NCH type CH i.type CR 
1 NA 1878464 nochurn 549371 churn 0.226280204 
2 1.87 2236 nochurn 4713 churn 0.678227083 
3 2.14 4945 nochurn 8530 churn 0.633024119 
4 2.25 423 nochurn 972 churn 0.696774194 
5 2.79 3238 nochurn 7692 churn 0.703751144 
6 3.25 266817 nochurn 12678 churn 0.045360382 
7 3.33 2132 nochurn 4295 churn 0.668274467 
8 5.1 6683 nochurn 7743 churn 0.536739221 
9 6 342554 nochurn 21648 churn 0.059439542 
10 6.51 1785 nochurn 4764 churn 0.727439304 
11 8 13668 nochurn 22751 churn 0.624701392 
12 9.85 6005 nochurn 14687 churn 0.709791224 
13 11.99 378 nochurn 850 churn 0.69218241", header = TRUE) 
+1

Что вы имеете в виду «не в состоянии увидеть все значения в оси х»? Возможно, см. [Scale_x_continuous] (http://docs.ggplot2.org/0.9.3/scale_continuous.html) – zx8754

+0

Спасибо, что направили меня в правильном направлении. Теперь я могу добавить больше меток к оси x. Это решает одну из проблем. – Shivendra

+0

Какая проблема не решена? – Gregor

ответ

1

Для пользовательских клещи и этикеток мы можем использовать scale_x_continuous.

Ниже предупреждение означает, что строки со значениями NA отбрасываются из участка данных:

Удалены 1 строки, содержащие недостающие значения (geom_point)

Обход, чтобы NA показать на оси х, мы нужно присвоить некоторое значение для значений NA, здесь я рисую значения NA на правом конце графика. Получите максимальное значение для переменной xaxis (temp), затем используйте пользовательскую метку оси x.

library(ggplot2) 

# set NA to max value + 1 
plotDat <- Result 
plotDat[ is.na(plotDat$temp), "temp"] <- max(ceiling(plotDat$temp), na.rm = TRUE) + 1 

#plot with custom breaks and labels 
ggplot(plotDat, aes(x = temp, y = CR)) + 
    geom_point() + 
    scale_x_continuous(breaks = 1:max(ceiling(plotDat$temp)), 
        labels = c(1:(max(ceiling(plotDat$temp)) - 1), "NA")) 

enter image description here

+0

Пока это будет работать, мой фактический код генерирует графики для более 500 функций с чрезвычайно изменяющимися диапазонами по оси x, которые 'ggplot2' может позаботиться и показать этикетки соответствующим образом. Если я поместил диапазон '1: n', он всегда заполнил бы все метки и стал бы очень загроможден для некоторых диапазонов. 'scale_x_continuous (na.value = TRUE)' сохраняет значение NA, только не отображая его по оси x. – Shivendra

+0

Аргумент @Shivendra 'na.value' требует числа. Когда мы устанавливаем его в «TRUE», он преобразуется в '1' и получает график. – zx8754

+0

О да, я вижу проблему здесь. Я хочу, чтобы не-число отображалось по шкале, которая непрерывна. Для некоторых функций показывались значения «NA». Это означает, что 'ggplot2' рассматривал их как« фактор », в то время как в этом случае он рассматривает их как« непрерывные », и поэтому я сталкиваюсь с трудностями. – Shivendra