| Bytes | Lang | Time | Link |
|---|---|---|---|
| 139 | AWK | 241203T174000Z | xrs |
| 041 | MATLAB | 240502T004308Z | 138 Aspe |
| 024 | Uiua | 240501T203307Z | noodle p |
| 031 | TIBasic TI 84+ | 240502T124410Z | corvus_1 |
| 013 | MATL | 220514T173255Z | Luis Men |
| 344 | Clojure | 220701T193612Z | Martin P |
| 050 | BQN | 220518T020848Z | Razetime |
| 073 | Applesoft BASIC | 220518T011259Z | Ohentis |
| 042 | R | 220517T075722Z | Dominic |
| 599 | Minecraft Command Blocks | 220515T202509Z | LostXOR |
| nan | SVGHTML5 + JavaScript ES6 | 220513T174517Z | Neil |
| 014 | Desmos | 220513T161116Z | naffetS |
| 049 | R | 220513T184840Z | pajonk |
| 068 | GFABasic 3.51 Atari ST | 220513T172132Z | Arnauld |
| 028 | J | 220513T165802Z | Jonah |
| 068 | SageMath | 220513T160606Z | Noodle9 |
| 144 | Excel & VBA | 220513T160336Z | Axuary |
| 022 | Wolfram Language Mathematica | 220513T151536Z | Romanp |
AWK, 139 bytes
BEGIN{for(a=b=1;(t+=.1)<14;)g[15-int((r=a+b*t)*sin(t)+.5),50+2*int(r*cos(t)+.5)]=1
for(;k++<30;print)for(j=0;j++<99;)printf g[k,j]?"*":" "}
MATLAB, 41 bytes
Golfed version. Check the bytes count.
t=linspace(0,50,1000);
polarplot(t,10.*t)
Ungolfed version.
clear all;close all;clc;
% Generate theta values from 0 to 50
theta = linspace(0, 50, 1000);
% Define the function for polar plot
g = @(r) r .* theta;
% Calculate the radius values using the function f for a specific theta, here 10
r=10;
f = g(r);
% Create the polar plot
polarplot(theta, f)
title(['Polar Plot for ', num2str(r), '*theta'])

Uiua, 24 bytes
°⊚-¤/↧.⁅××∿⍉⊟+η..÷50⇡1e3
Explanation:
÷50⇡1e3 # [0,1,...,999] divided by 50
# consider each as a single θ
∿⍉⊟+η.. # [sin θ, sin(θ + π/2) = cos θ]
× # multiply both by θ
× # multiply both by a, giving an (x, y) pair
-¤/↧.⁅ # round, subtract the minimum coordinate of all 1,000 from each
°⊚ # boolean matrix with 1s at these indices
MATL, 13 bytes
9W:9/tJ*Ze*XG
Try it at MATL online!
Explanation
9W % Push 9. 2 raised to that. Gives 512
: % Range. Gives [1 2 ... 512]
9/ % Divide each entry by 9
t % Duplicate
J* % Multiply each entry by imaginary unit
Ze % Exponential of each entry
* % Multiply each pair of entries
XG % Plot
Clojure, 344 bytes
(defn s[a](doto(JFrame."")(.setPreferredSize(Dimension. 500 500))(.add(doto(proxy[JPanel][](paintComponent[g](.drawPolyline g (into-array Integer/TYPE(map #(+ 250(* a(/ % 20)(Math/cos(Math/toRadians %))))(range 3600)))(into-array Integer/TYPE(map #(- 250(* a(/ % 20)(Math/sin(Math/toRadians %))))(range 3600)))3600))))).pack(.setVisible true)))
Output for (s 1):
BQN, 50 bytesSBCS
(•math.Sin•Plot○(⊢×↕∘≠)•math.Cos)-2×π×999⥊99÷˜↕100
The JS version of BQN has a plotting builtin, which I used for the same rosetta code task. This is just a golf of that.
R, 42 bytes*
function(a,x=0:6e3/1e3)plot(a*x*pi*1i^x/2)
Calculates the the points of the spiral as the real and imaginary parts of complex numbers, which is conveniently displayed directly as points on the complex plane by the R plot function.
*The *pi.../2 bit here is to scale the image so that the angle is in radians and achieve a distance between arms of exactly 2*pi. If we use an alternative unit of angular measurement, such as quadrants, we could drop this for 37 bytes: function(a,x=0:6e3/1e3)plot(a*x*1i^x).
Note also that the choice of 1e3 plotted points per quadrant was chosen to allow direct competition with pajonk's R answer; however, 99 plotted points per quadrant also gives a satisfactory output (the points overlap) and saves another byte: function(a,x=0:999/99)plot(a*x*1i^x).
R + pracma library, 39 bytes
function(a)pracma::polar(r<-0:99/9,a*r)
Using a dedicated polar function doesn't save much, if anything at all.
Minecraft Command Blocks, 599 bytes
Commands
Left column (bottom block 0, 4, -2)
scoreboard objectives add c dummy
scoreboard players set m c 1
summon armor_stand 0 0 0
setblock 0 3 0 redstone_block
Middle column (bottom block 0, 4, 0)
execute at @e[type=armor_stand] run setblock ~ ~ ~ stone
tp @e[type=armor_stand] 0 0 0
execute as @e[type=armor_stand] at @s run tp @s ~ ~ ~ ~5 ~
scoreboard players reset d
scoreboard players add m c 1
setblock 0 3 1 air
setblock 0 3 1 redstone_block
Right column (bottom block 0, 4, 1)
execute as @e[type=armor_stand] at @s run tp @s ^ ^ ^<Input>
scoreboard players add d c 1
setblock 0 3 1 air
setblock 0 3 0 air
execute unless score d c = m c run setblock 0 3 1 redstone_block
execute if score d c = m c run setblock 0 3 0 redstone_block
The distance multiplier is set in the first command block in the right column. Hardcoding inputs is not allowed by codegolf rules, but there isn't any other way to take input in Minecraft.
When ran for an hour with an input of 0.1 it produced this. It starts skipping blocks after a little over one rotation but it does complete one full rotation.

SVG(HTML5) + JavaScript (ES6), 77 76 + 96 = 172 bytes
f=a=>s.setAttribute("points",[...Array(9e3)].map((_,i)=>[Math.sin(i/=100)*i*a,Math.cos(i)*i*a]))
;f(.1)
<input value=.1 oninput=f(+value)><br>
<svg viewBox=-4,-4,8,8><polyline id=s fill=none stroke=red stroke-width=.05>
Edit: Saved 1 byte thanks to @Kaiido.
GFA-Basic 3.51 (Atari ST), 68 bytes
A manually edited listing in .LST format. All lines end with CR, including the last one.
PRO d(a)
F t=0TO 251
PL 160+t*COS(t/20)*a,100-t*SIN(t/20)*a
N t
RET
which expands to:
PROCEDURE d(a)
FOR t=0 TO 251
PLOT 160+t*COS(t/20)*a,100-t*SIN(t/20)*a
NEXT t
RETURN
NB: We use \$251\$ as the upper bound so that the curve stops on the x-axis rather than at some random position (because \$251/20\approx 4\pi\$).
Example output
SageMath, 69 68 bytes
lambda a,t=var('t'):parametric_plot((a*t*cos(t),a*t*sin(t)),(t,0,9))
Saved a byte thanks to Seggan!!!
Original graph using 42 instead of 9
Excel & VBA, 144 bytes
Cell B1 = SEQUENCE(90)/9*PI()
Cell C1 = B1#*COS(B1#)*A1
Cell D1 = B1#*SIN(B1#)*A1
VBA Immediate Window Set x=activesheet.Shapes.AddChart2(,73,,,,360):x.Chart.SetSourceData Source:=Range("C1:D96")
Could cut the ,,,,360 if the plot doesn't have to be square.

Wolfram Language (Mathematica), 22 bytes
PolarPlot[y#,{y,0,7}]&
I picked 7 for the plot range because it's a one-digit number that is close to \$2\pi\$ (so we get just around 1 rotation, slightly more).
Example result for input = 1:
Example when we replace 7 with 50 (makes it more accurate to the image in the original post, but is one byte longer):











