Another, fairly general way to approach this is to discretize the plot into points, which can then be controlled at will. For example, with the OPs Sine function:
data = Table[{x, Sin[x]}, {x, 0, 3 Pi, 0.01}];
Graphics[Point[data]]
To vary the size of the individual points:
allPointsSize = Table[{PointSize[data[[i, 1]]/300],
Point[data[[i]]]}, {i, 1, Length[data]}];
Graphics[allPointsSize]
To vary both the size and color:
allPointsColor = Table[{PointSize[data[[i, 1]]/300],
Hue[i/Length[data]], Point[data[[i]]]}, {i, 1, Length[data]}];
Graphics[allPointsColor]