Python is ideal for repeating text characters. Just multiply a certain text character, for example '●'
with a number, and it will show the '●'
character repeated based on the defined number.
Knowing that you can create a custom function in the field expression to repeat '●' based on the casualties field.
from qgis.core import *
from qgis.gui import *
@qgsfunction(args='auto', group='Custom', referenced_columns=[])
def repeat_txt(numfield, feature, parent):
return '●' * numfield
In the Layer styling → labeling, go to expression → Custom → double-click to add repeat_txt
function with casualties number field like this:
repeat_txt("casualties_number_field")

where "Num"
is the field for the number of casualties.
The result is like this:

If you want the circles to be organized every 5 circles per line you need to update the expression as follows
from qgis.core import *
from qgis.gui import *
import re
@qgsfunction(args='auto', group='Custom', referenced_columns=[])
def repeat_txt(numfield, feature, parent):
txt = '?' * numfield
txt_wrap = re.sub("(.{5})", "\\1\n",txt , 0, re.DOTALL)
return txt_wrap
The re function came from the brilliant answer on StackExchange Insert a newline character every 64 characters using Python
Then reuse the same expression
repeat_txt("casualties_number_field")
The result is like this (the numbers are shown for your reference)

If you do not want the symbol, you can turn it off the symbology and select No Symbols
This is the final result:
