Question: I need to open an existing \*.xlsx Excel file, make some modifications, and then save it as a new file (or stream it to the frontend without saving). The original file must remain unchanged.

For Memory reasons, I avoid using FileInputStream (as described here: <http://poi.apache.org/spreadsheet/quick-guide.html#FileInputStream> )

```
// XSSFWorkbook, File
OPCPackage pkg = OPCPackage.open(new File("file.xlsx"));
XSSFWorkbook wb = new XSSFWorkbook(pkg);
....
pkg.close();

```

Answer: 
X and y labels are bound to an axes in matplotlib. So it makes little sense to use `xlabel` or `ylabel` commands for the purpose of labeling several subplots. 

What is possible though, is to create a simple text and place it at the desired position. `fig.text(x,y, text)` places some text at coordinates `x` and `y` in figure coordinates, i.e. the lower left corner of the figure has coordinates `(0,0)` the upper right one `(1,1)`.

```
import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame({'A': [0.3, 0.2, 0.5, 0.2], 'B': [0.1, 0.0, 0.3, 0.1], 'C': [0.2, 0.5, 0.0, 0.7], 'D': [0.6, 0.3, 0.4, 0.6]}, index=list('abcd'))
axes = df.plot(kind="bar", subplots=True, layout=(2,2), sharey=True, sharex=True)

fig=axes[0,0].figure
fig.text(0.5,0.04, "Some very long and even longer xlabel", ha="center", va="center")
fig.text(0.05,0.5, "Some quite extensive ylabel", ha="center", va="center", rotation=90)

plt.show()

```

[![enter image description here](https://i.stack.imgur.com/8A97k.png)](https://i.stack.imgur.com/8A97k.png)

The drawback of this solution is that the coordinates of where to place the text need to be set manually and may depend on the figure size.
Another solution: create a big subplot and then set the common labels. Here is what I got.

[enter image description here](https://i.stack.imgur.com/tiDKH.png)
-------------------------------------------------------------------

The source code is below.

```
import pandas as pd
import matplotlib.pyplot as plt

fig = plt.figure()
axarr = fig.add_subplot(221)   

df = pd.DataFrame({'A': [0.3, 0.2, 0.5, 0.2], 'B': [0.1, 0.0, 0.3, 0.1], 'C': [0.2, 0.5, 0.0, 0.7], 'D': [0.6, 0.3, 0.4, 0.6]}, index=list('abcd'))
axes = df.plot(kind="bar", ax=axarr, subplots=True, layout=(2, 2), sharey=True, sharex=True, rot=0, fontsize=20)

# Create a big subplot
ax = fig.add_subplot(111, frameon=False)
# hide tick and tick label of the big axes
plt.tick_params(labelcolor='none', top='off', bottom='off', left='off', right='off')

ax.set_xlabel('my_general_xlabel', labelpad=10) # Use argument `labelpad` to move label downwards.
ax.set_ylabel('my_general_ylabel', labelpad=20)

plt.show()

```