Я использую ggplot2 для построения ряда данных - производительность в зависимости от количества потоков, для нескольких разных количеств итераций цикла. Я получил точки данных, чтобы показать, где они мне нужны, и использовал geom_line()
для соединения точек.
Я хочу получить плавные линии, а не зубчатые линии, соединяющие эти точки. Не линии подгонки / линии тренда - просто красивые сплайны, аналогичные тем, которые вы получили бы в Excel или Google Sheets при создании графика плавных линий.
Я уверен, что лучший способ сделать это - использовать функцию spline()
в сочетании с geom_line()
, но я не знаю, как именно это сделать. В какой-то момент у меня появился один сплайн для всего графика, но я, кажется, сломал его. Я ни разу не смог получить несколько сплайнов вместо нескольких зубчатых линий, показанных на рисунке ниже.
ggplot кажется кратчайшим путем к тому, чего я пытаюсь достичь, но я открыт для предложений, которые его не используют.
Вот что я получил прямо сейчас в своем R-скрипте, создавая неровные линии:
#!/usr/bin/Rscript
# Read from stdin (pipe from runProj2 output) and write to txt before mod
data <- read.table('stdin', header=TRUE)
write.table(data, "data.txt", sep="\t", row.names=FALSE)
# Get rid of volume field to analyze performance vs. threads and nodes
data$Volume <- NULL
# Organize data by both threads and nodes & output for PDF incorporation
dataByThreads <- reshape(data, idvar = "Threads", timevar = "Nodes", direction = "wide")
dataByNodes <- reshape(data, idvar = "Nodes", timevar = "Threads", direction = "wide")
write.table(dataByThreads, "dataByThreads.txt", sep="\t", row.names=FALSE)
write.table(dataByNodes, "dataByNodes.txt", sep="\t", row.names=FALSE)
# Plot
library(ggplot2)
library(reshape2)
# Melt data back into long format for ggplot
threads_long <- melt(dataByThreads, id="Threads")
nodes_long <- melt(dataByNodes, id="Nodes")
ggplot(data=threads_long,
aes(x=Threads, y=value, color=variable)) +
geom_point() +
geom_line() +
labs(y='MegaHeights per Second', x='Threads', color='Nodes') +
ggtitle('Performance vs. Threads')
ggplot(data=nodes_long,
aes(x=Nodes, y=value, color=variable)) +
geom_point() +
geom_line() +
labs(y='MegaHeights per Second', x='Nodes', color='Threads') +
ggtitle('Performance vs. Threads')
Вот что у меня так далеко: