I think you just need to add more to the bottom margin? This will left-align the annotation with-respect-to the y-axis (is that what you want?)
df <- data.frame(x = 1:10, y = 1:10)
plot_ly(data = df, x = ~x, y = ~y, height = 400, width = 600) %>%
add_lines() %>%
layout(title = 'Sample Chart',
margin = list(l = 50, r = 50, t = 60, b = 100),
annotations = list(text = 'Source: U.S. Census Bureau.',
font = list(size = 12),
showarrow = FALSE,
xref = 'paper', x = 0,
yref = 'paper', y = -0.3))
PS. when using normalized (i.e., paper) coordinates, itβs a good idea to explicitly set the height/width, so the result is always the same, no matter the printing context.