Преобразование неровных линий в сплайны в ggplot2 - PullRequest
0 голосов
/ 17 апреля 2019

Я использую 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')

Вот что у меня так далеко:

from link

...