For me, your GraphicsGrid
doesn't have such issues with the spacings:
plots = Table[
ListLinePlot[
RandomReal[{-0.3, 0.3}, 10],
PlotStyle -> {Thick, ColorData[112][i]},
PlotRange -> {-0.3, 0.3},
AxesStyle -> Black],
{i, 3}, {j, 3}
]
Labeled[
GraphicsGrid[
plots,
Spacings -> {0, 0},
Frame -> None,
AspectRatio -> 1
],
{Pane["Too far out, and I need a label (centered) for each row"],
"Fine!", "This is fine, except I need a label (centered) for each \
column"},
{Left, Bottom, Top},
RotateLabel -> True,
LabelStyle ->
Directive[Bold, FontFamily -> "Consolas", FontSize -> 16]
]

(this is using version 11.3 or 12.0 on Windows)
Now, to add the column/row-wise labels, you can use Labeled
on the individual plots:
plots = Table[
If[i == 1,
Labeled[#, Row@{"Row ", j}, Top],
#
] &@If[j == 1,
Labeled[#, Row@{"Column ", i}, Left, RotateLabel -> True],
#
] &@ListLinePlot[
RandomReal[{-0.3, 0.3}, 10],
PlotStyle -> {Thick, ColorData[112][i]},
PlotRange -> {-0.3, 0.3},
AxesStyle -> Black],
{i, 3}, {j, 3}
]
Labeled[
GraphicsGrid[
plots,
Spacings -> {0, 0},
Frame -> None,
AspectRatio -> 1,
ImageSize -> 600
],
{Pane["Too far out, and I need a label (centered) for each row"],
"Fine!", "This is fine, except I need a label (centered) for each \
column"},
{Left, Bottom, Top},
RotateLabel -> True,
LabelStyle ->
Directive[Bold, FontFamily -> "Consolas", FontSize -> 16]
]

Alternatively, you could use ResourceFunction["PlotGrid"]
together with FrameLabel
on the individual plots and the entire plot-grid to get your labels:
plots = Table[
ListLinePlot[
RandomReal[{-0.3, 0.3}, 10],
PlotStyle -> {Thick, ColorData[112][i]},
PlotRange -> {-0.3, 0.3},
Frame -> True,
FrameStyle -> Black,
FrameLabel -> {{Row@{"Row ", i}, None}, {None, Row@{"Column ", j}}},
Axes -> True
],
{i, 3}, {j, 3}
]

ResourceFunction["PlotGrid"][
plots,
FrameLabel -> {{Pane[
"Too far out, and I need a label (centered) for each row"],
None}, {"Fine!",
"This is fine, except I need a label (centered) for each column"}},
Spacings -> 10,
ImageSize -> 700,
"ShowFrameLabels" -> Automatic,
FrameStyle ->
Directive[Black, Bold, FontFamily -> "Consolas", FontSize -> 16],
AspectRatio -> 1
]

Note how the inner labels are automatically hidden, together with the tick labels. If you want all of the tick labels, use "ShowFrameLabels"->Full
: (note that this requires hiding the FrameLabel
s manually)
plots = Table[
ListLinePlot[
RandomReal[{-0.3, 0.3}, 10],
PlotStyle -> {Thick, ColorData[112][i]},
PlotRange -> {-0.3, 0.3},
Frame -> True,
FrameStyle -> Black,
FrameLabel -> {{If[j == 1, Row@{"Row ", i}, None], None}, {None,
If[i == 1, Row@{"Column ", j}, None]}},
Axes -> True
],
{i, 3}, {j, 3}
]
ResourceFunction["PlotGrid"][
plots,
FrameLabel -> {{Pane[
"Too far out, and I need a label (centered) for each row"],
None}, {"Fine!",
"This is fine, except I need a label (centered) for each column"}},
Spacings -> 30,
ImageSize -> 700,
"ShowFrameLabels" -> Full,
FrameStyle ->
Directive[Black, Bold, FontFamily -> "Consolas", FontSize -> 16],
AspectRatio -> 1
]

Alignment issues
Something similar can of course also be achieved using GraphicsGrid
. Note that GraphicsGrid
will not properly align the individual plots in versions before 12.0 or when the plots are Labeled
:
plots2 = Table[
If[i == 1,
Labeled[#, Row@{"Row ", j}, Top],
#
] &@If[j == 1,
Labeled[#, Row@{"Column ", i}, Left, RotateLabel -> True],
#
] &@ListLinePlot[
RandomReal[{-0.05, 0.3}, 10],
PlotStyle -> {Thick, ColorData[112][i]},
(*PlotRange\[Rule]{-0.3,0.3},*)
AxesStyle -> Black,
Frame -> True],
{i, 3}, {j, 3}
]
Labeled[
GraphicsGrid[
plots2,
Spacings -> {0, 0},
Frame -> None,
AspectRatio -> 1,
ImageSize -> 600
],
{Pane["Too far out, and I need a label (centered) for each row"],
"Fine!", "This is fine, except I need a label (centered) for each \
column"},
{Left, Bottom, Top},
RotateLabel -> True,
LabelStyle ->
Directive[Bold, FontFamily -> "Consolas", FontSize -> 16]
]

This issue is only visible if the ImagePadding
is not the same for all plots, as is e.g. the case when the plot ranges are not all the same. ResourceFunction["PlotGrid"]
will always align the plots properly, but is only available starting from version 11.3 (unless you manually copy the definition somewhere).