Q:

ggplot2 and CSV "inventing" data that isn't in my input

I'm attempting to produce an attractive graph of bandwidth data across a number of machines and tests. My attempts seem to work for small manually entered amounts of data, but when I feed the "full" 1773 entries, I get results in my graph that don't seem to exist in the input data.
I believe this is likely because the different tests are each of different duration, but I can't seem to prove this. If I use the following input data as csv (sorry, off-site because of size) I end up with a strange upwards-curve on my geom_smooth line, and additional data points that I can't actually see in my .csv input data. (I have much more data in real life, this is a subset that produces the strange behaviour)
I would expect the first four tries (try01-try04) to flat-line at zero, and try05 to carry on at around 1GBit/sec. Here's my code
library("ggplot2")
library("RColorBrewer")

speed = read.csv(file="data.csv")

svg("all_results.svg",width=24)
ggplot(speed,
    aes(x = Second, y = Bandwidth, group=Test, colour=Test)) +
    scale_fill_brewer(palette="Paired") +
    geom_point() +
    geom_smooth()
dev.off()

Here's the image produced
@Gregor seems to be exactly right in that the seconds are interpreted as text, when they should represent the number of the seconds since the start of that test.
Here's some example input data - please note the times are not always on a .00 second boundary due to the output of iperf.
structure(list(Machine = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "valhalla", class = "factor"), 
    User = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "alice", class = "factor"), 
    Test = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = "try01", class = "factor"), 
    Second = structure(c(1L, 2L, 13L, 14L, 15L, 16L, 17L, 18L, 
    19L, 20L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L), .Label = c("0.00-1.00", 
    "1.00-2.00", "10.00-11.00", "11.00-12.00", "12.00-13.00", 
    "13.00-14.00", "14.00-15.00", "15.00-16.00", "16.00-17.00", 
    "17.00-18.00", "18.00-19.00", "19.00-20.00", "2.00-3.00", 
    "3.00-4.00", "4.00-5.00", "5.00-6.00", "6.00-7.00", "7.00-8.00", 
    "8.00-9.00", "9.00-10.00"), class = "factor"), Bandwidth = c(937, 
    943, 944, 943, 943, 943, 943, 944, 658, 943, 944, 943, 944, 
    644, 943, 943, 943, 944, 943, 943)), row.names = c(NA, 20L
), class = "data.frame")

I'll try casting (or whatever R calls it) those to a float now.

A:

Points have a single x value, not a range of x-values, so we'll separate your Second column into beginning and end of the interval and plot the points at the beginning. Calling your data dd"
library(tidyr)
library(dplyr)
dd = dd %>%
  separate(Second, into = c("sec_start", "sec_end"), sep = "-", remove = FALSE) %>%
  mutate(sec_start = as.numeric(sec_start),
         sec_end = as.numeric(sec_end))

After that the plotting should go just fine if you put sec_start or sec_end on the x-axis. (Or calculate the middle, whatever you want...)
If you want to visualize the durations, you could use geom_segment and aes(x = sec_start, xend = sec_end, y = Bandwidth, yend = Bandwidth), but since everything is just about the same duration, it doesn't seem like this would add much value.

