It appears that FPS is capped by the UPS not reaching 60.
UPS measures updates of the game state (known as tick) per second. Normally the game tries to update the state 60 times per second, so that each changed state can be drawn by the GPU on screen. If the update takes more than 1s/60 = 16.667ms, the GPU has nothing to draw, so FPS will drop, too.
Why is UPS dropping?
From what I can see in the center left "Update" section (and be aware: I am no technical expert), the most time appears to be spent on
- entity updates (~7ms)
- transport lines (items on belts) (~4ms)
- trains (~1ms)
The entire update together reaches (over the last 100 ticks, in milliseconds)
average/min/max
15.261/13.951/19.859
So you run into the limit of what your computer can handle.
In particular, the train path finder appears to have spikes of computation times, caused by finding paths for trains in very large/compex train systems. This is likely causing the peaks in the total maximum update time.
But the computation time for entities alone reaching half of the entire available time hints towards a very large base in the first place, or a large uncovered area with lots of active biters.
It is possible that your base is just large enough to run into the biggest bottleneck for Factorio: Ram access speed / timings.
As far as I am aware, the CPU is not the limiting factor in a large base, but how quickly the data can be loaded from RAM into the CPU, and back into RAM. If your RAM is not fast enough, your CPU will not be running at 100% all the time.
In order to get this confirmed by someone who knows the technical side better than I do, they might want to additionally have a look at your save file and your logfile.
In the mean time, you could try lowering some graphics settings. For example animation quality, graphics quality, light rendering, smoke effects, or particle effects. But since you appear to be capped by UPS (not FPS), I doubt that this will magically solve your issue.
Another suspicion that I have: a lot of computation time (and RAM access) is required to deal with large amounts of biters.
This was reported several times. Especially, when you have artillery that permanently arrgoes large amounts of biters to come attack you (and need to compute attack paths).
So if you play with biters that constantly attack your base, this has a considerable impact on performance.
If you don't want to deal with biters and just scale up your base, it could be a good idea to just remove all biters from the game and disallow them from spawning in the future. The wiki explains how:
https://wiki.factorio.com/Console#Enemy ... on_scripts
Other people try to optimize their factory design so as to not use a lot of entities that require much time to update. You can search the forums for "UPS" and "megabase" and find lots of issues/ideas/solutions. For example: Solar panels are much easier to deal with (computationally) than steam or nuclear power. The latter rely on fluids, inserters and transport belts.
Other than that, there is not much I can tell you. Even with a savegame or a logfile. But other people might.