You can use geometry generator to have full controll of all settings. First make a circle with `make_circle(centroid($geometry), "population_total")` , replacing "population_total" with whatever attribute or value you like - you probably have to multiply or divide it by a coefficient to adapt the circles to a suitable size. In the second step, add text from your fields in the labels tab. Use something like `"attribute_1" || '$$' || "attribute_2" || '$$' || "attribute_3"` for the label and define $ as line-wrapping character to have the three values in a separate line with spacing in between. Use data driven override for defining the size of the labels: [![enter image description here][1]][1] The circle is not quite a circle, but is made of some segments - if you want it to look more like a circle, you can increase the number of segments: make_circle(centroid($geometry), "radius", 40) where "radius" is the field you use for the radius to generate circles in different size and 40 is the no. of segments - change this to fit your needs. If you want it a little bit more sophisticated, you can introduce horizontal lines as in the text diagram. For three lines, use this expression (where you have to replace radius with the value or expression you used for the radius of the circle): for the upper line: make_line( (project ( centroid($geometry), "radius"/6, 2*pi()-( asin( sqrt(("radius"/6 * "radius"/6)-("radius"/18 * "radius"/18)) / ("radius"/6)) ) ) ), (project ( centroid($geometry), "radius"/6, asin( sqrt(("radius"/6 * "radius"/6)-("radius"/18 * "radius"/18)) / ("radius"/6) ) ) ) ) for the bottom line: make_line( project( centroid($geometry), "radius"/6, 1*pi()-( asin( sqrt( (("radius"/6 * "radius"/6)-("radius"/18 * "radius"/18))) / ("radius"/6)) ) ), project( centroid($geometry), "radius"/6, pi()+ ( asin( sqrt((("radius"/6 * "radius"/6)-("radius"/18 * "radius"/18))) / ("radius"/6)) ) ) ) Sizing the text is a trial and error - I used the transformation curve to adapt the text easier to the size of the circles - I used the square root of the value used for the radius of the circles (`"data_total_pop"`) as input to the text-size assistant: `sqrt("data_total_pop")`. [![enter image description here][2]][2] [1]: https://i.sstatic.net/ywZXb.png [2]: https://i.sstatic.net/2xZBT.png