Используйте sed для соответствия последней строке файла, который затем добавит новую строку, если она не существует, и пусть она выполняет встроенную замену файла:
sed -i '' -e '$a\' file
Код из этой ссылки stackexchange
Примечание: я добавил пустые одинарные кавычки в -i ''
, потому что, по крайней мере, в OS X, -i
использовал -e
в качестве расширения файла для файла резервной копии. Я бы с радостью прокомментировал исходный пост, но мне не хватило 50 баллов. Возможно, это принесет мне немного в этой теме, спасибо.
Использование фиктивных данных @Arun :) здесь решение lattice
:
xyplot(val~x,type=c('l','p'),groups= variable,data=df,auto.key=T)
[/g0]
Если ваши данные в широкоформатном формате matplot
сделаны для этого и часто забываются о:
dat <- matrix(runif(40,1,20),ncol=4) # make data
matplot(dat, type = c("b"),pch=1,col = 1:4) #plot
legend("topleft", legend = 1:4, col=1:4, pch=1) # optional legend
Существует также дополнительный бонус для тех, кто не знаком с вещами подобно ggplot
, что большинство параметрирующих параметров, таких как pch
и т. д., одинаковы, используя matplot()
как plot()
. [/g1]
Если вы хотите использовать решение ggplot2
, вы можете сделать это, если можете сформировать свои данные в этом формате (см. пример ниже)
# dummy data
set.seed(45)
df <- data.frame(x=rep(1:5, 9), val=sample(1:100, 45),
variable=rep(paste0("category", 1:9), each=5))
# plot
ggplot(data = df, aes(x=x, y=val)) + geom_line(aes(colour=variable))
[/g0]
У вас есть правильная общая стратегия для этого, используя базовую графику, но, как было указано, вы, по сути, говорите R, чтобы выбрать случайный цвет из набора по 10 для каждой строки. Учитывая это, неудивительно, что вы будете иногда получать две строки одного цвета. Вот пример использования базовой графики:
plot(0,0,xlim = c(-10,10),ylim = c(-10,10),type = "n")
cl <- rainbow(5)
for (i in 1:5){
lines(-10:10,runif(21,-10,10),col = cl[i],type = 'b')
}
[/g0]
Обратите внимание на использование функции type = "n"
для подавления всех графиков в исходном вызове для настройки окно и индексирование cl
внутри цикла for.
lapply
вместо for
– theforestecologist
4 June 2018 в 22:57
Вот пример кода, который включает в себя легенду, если это интересно.
# First create an empty plot.
plot(1, type = 'n', xlim = c(xminp, xmaxp), ylim = c(0, 1),
xlab = "log transformed coverage", ylab = "frequency")
# Create a list of 22 colors to use for the lines.
cl <- rainbow(22)
# Now fill plot with the log transformed coverage data from the
# files one by one.
for(i in 1:length(data)) {
lines(density(log(data[[i]]$coverage)), col = cl[i])
plotcol[i] <- cl[i]
}
legend("topright", legend = c(list.files()), col = plotcol, lwd = 1,
cex = 0.5)
В одной и той же диаграмме можно рисовать более одной строки с помощью функции lines()
# Create the data for the chart.
v <- c(7,12,28,3,41)
t <- c(14,7,6,19,3)
# Give the chart file a name.
png(file = "line_chart_2_lines.jpg")
# Plot the bar chart.
plot(v,type = "o",col = "red", xlab = "Month", ylab = "Rain fall",
main = "Rain fall chart")
lines(t, type = "o", col = "blue")
# Save the file.
dev.off()
В дополнение к [j0] @ joran's , используя базовую функцию plot
с петлей for
, вы также можете использовать base plot
с lapply
:
plot(0,0,xlim = c(-10,10),ylim = c(-10,10),type = "n")
cl <- rainbow(5)
invisible(lapply(1:5, function(i) lines(-10:10,runif(21,-10,10),col = cl[i],type = 'b')))
invisible
просто служит для предотвращения создания lapply
вывода в вашей консоли (поскольку все, что мы хотим, это рекурсия, предоставляемая функцией, а не список). Как вы можете видеть, он дает тот же результат, что и при использовании подхода цикла for
.
Итак, почему lapply
?
Хотя было показано, что lapply
работает быстрее / лучше, чем for
в R (например, см. здесь , хотя см. здесь для экземпляра, где это не так), в этом случае он примерно примерно одинаково:
. Увеличение числа строк до 50000 для подходов lapply
и for
заняло мою систему 46.3
и 46.55
секунд соответственно.
lapply
был чуть быстрее, это было пренебрежимо. Эта разница в скорости может пригодиться при более крупном / более сложном графике, но, если честно, 50000 строк, вероятно, довольно хороший потолок ... Итак, ответ на вопрос «почему lapply
? ": это просто альтернативный подход, который работает одинаково. :)
Я знаю, его старый пост, чтобы ответить, но, как я натолкнулся на поиск той же записи, кто-то еще может сюда поменять
Добавив: цвет в функции ggplot, я мог бы достичь линий с разными цветами, относящимися к группе, присутствующей на графике.
ggplot(data=Set6, aes(x=Semana, y=Net_Sales_in_pesos, group = Agencia_ID, colour = as.factor(Agencia_ID)))
и
geom_line()
[/g0]