2016-01-10 7 views
0

Я пытаюсь построить график и отформатировать ось y так, чтобы числа имели правильный интервал (5000 единиц) и были отформатированы с запятыми (например, 350 000). Также я пытаюсь получить ось x (дата), чтобы показать больше уточнения, так что у меня есть больше дат на оси x для просмотра зрителем. Каждый раз, когда я рисую график, я получаю числа по оси х, а не по датам.Форматирование оси X-Y в R

Это то, что я до сих пор

plot(date,sales,type="s",ylab="Sales",yaxt="n") 
axis(1, at = seq(min(date), max(date), length.out = 1) 
axis(2, at = seq(min(sales), max(sales), length.out = 20), labels = formatC(seq(min(revenue), max(revenue), length.out = 20),small.mark = " ", format = "d"), las = 2) 

Вот данные я использую:

sales <- c(76103, 57300, 49875, 52113, 47891, 43531, 50909, 54182, 55884, 
63780, 57165, 59841, 65952, 67602, 70693, 76375, 83365, 82051, 
88568, 100717, 99344, 88980, 99034, 99593, 110497, 87223, 98350, 
102337, 116642, 116854, 138072, 137737, 84696, 64028, 74457, 
82260, 89841, 90251, 92486, 95298, 105186, 114004, 125486, 125330, 
121609, 124053, 127363, 115706, 115173, 108807, 106469, 112372, 
110860, 106773, 111647, 107490, 86029, 67618, 74113, 67344) 

date <- structure(c(11292, 11382, 11474, 11566, 11657, 11747, 11839, 
11931, 12022, 12112, 12204, 12296, 12387, 12478, 12570, 12662, 
12753, 12843, 12935, 13027, 13118, 13208, 13300, 13392, 13483, 
13573, 13665, 13757, 13848, 13939, 14031, 14123, 14214, 14304, 
14396, 14488, 14579, 14669, 14761, 14853, 14944, 15034, 15126, 
15218, 15309, 15400, 15492, 15584, 15675, 15765, 15857, 15949, 
16040, 16130, 16222, 16314, 16405, 16495, 16587, 16679), class = "Date") 
+0

Пожалуйста, используйте 'dput()', если вы хотите получить данные. –

+0

Спасибо Pascal. Ценю вашу помощь. – jessica

+0

Мне удалось получить номера оси y в раунд, используя: ось (2, at = seq (раунд (мин. Доход)/100) * 100, раунд (макс (доход)/100) * 100, length.out = 5), label = formatC (seq (round (min (доход)/100) * 100, раунд (макс (доход)/100) * 100, length.out = 5), small.mark = "", format = " d "), las = 2) – jessica

ответ

2

Если ваш участок не огромна (намного больше, чем экран), количество этикеток вы просите, будет нечитаемым, потому что они накладывают друг на друга. Следуя духу того, что вы просите (у-тики каждый 5000, запятые у этикеток, больше х наклеек, которые имеют смысл):

# enlarge left margin to accommodate transposed labels 
par(mar = c(5.1, 6.1, 2.1, 2.1)) 

# a sequence for tick marks 
y_seq <- seq((min(sales) %/% 5000) * 5000, 
      (max(sales) %/% 5000 + 1) * 5000, 
      by = 5000) 

# a sequence for labels 
y_labs <- prettyNum(y_seq, big.mark = ',') 
y_labs[seq(1, length(y_labs), 2)] <- NA 

plot(date, sales, type="s", ylab=NA, xaxt = 'n', yaxt = 'n') 

# `axis.Date` makes sequencing and formatting easy; adapt as you like 
axis.Date(1, date, at = seq.Date(min(date), max(date), by = 'year'), format = '%Y') 
axis(2, at = y_seq, labels = y_labs, las = 2) 

# add y label in a readable location 
title(ylab = 'Sales', mgp = c(4.5, 1, 0)) 

который производит plot with fixed axis labels

Если вы хотите больше этикеток , подход довольно настраиваемый отсюда.

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

всего две линии:

library(ggplot2) 
qplot(date, sales, geom = 'step') 

делает

ggplot version

+0

Алистер, я тебя люблю! Спасибо огромное! – jessica

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