I am a beginner with Pandas and Matplotlib and I have some questions about formatting plots when using pandas. I have the following code for an area plot:
import pandas as pd
from matplotlib import pyplot as plt
ax= wind_data.plot.area()
plt.legend(loc='center left', bbox_to_anchor= (1.0, 0.5))
plt.grid(False)
ax.set_facecolor("white")
ax.set_xlabel("Time of day")
ax.set_ylabel("Power in kW")
ax.set_xlim(0,24)
ax.set_ylim(0,50)
Now I want to change the following aspects:
- The values on the x axis are times of the day. They should be displayed beginning from 00:00 - 24:00. So for every hour there should be an entry. The entries should be written vertically (not horizontally) due to lack of space
- When I export the png-file there is a grey box around the plot. This should not be the case. Instead there should be a thin black line that serves as the rim
- I would like to have some horizontal line at every entry of the y-axis. This line should not be so strong but rather somehow transparent such that you can see it, without being dominant.
Is it possible to do this with Matplotlib(or any other library for python)?
EDIT: Here you have the input data:
Building 1 Building 2 Building 3 Building 4 Building 5
7.04 7.04 7.04 7.04 7.04
6.36 6.36 6.36 6.36 6.36
6.4 6.4 6.4 6.4 6.4
6.1 6.1 6.1 6.1 6.1
5.88 5.88 5.88 5.88 5.88
6.18 6.18 6.18 6.18 6.18
6.16 6.16 6.16 6.16 6.16
5.82 5.82 5.82 5.82 5.82
5.28 5.28 5.28 5.28 5.28
4.82 4.82 4.82 4.82 4.82
4.18 4.18 4.18 4.18 4.18
4.02 4.02 4.02 4.02 4.02
4.08 4.08 4.08 4.08 4.08
4.24 4.24 4.24 4.24 4.24
6.24 6.24 6.24 6.24 6.24
8.44 8.44 8.44 8.44 8.44
8.72 8.72 8.72 8.72 8.72
8.06 8.06 8.06 8.06 8.06
7.16 7.16 7.16 7.16 7.16
6.52 6.52 6.52 6.52 6.52
7.16 7.16 7.16 7.16 7.16
7.88 7.88 7.88 7.88 7.88
8.44 8.44 8.44 8.44 8.44
8.56 8.56 8.56 8.56 8.56
EDIT: Error message when using JohanC's solution code in Jupyter
AttributeError Traceback (most recent call last)
<ipython-input-5-51251d64e3e0> in <module>()
21 ax.set_xlim(1, 24)
22 ax.set_ylim(0, 50)
---> 23 plt.xticks(wind_data.index, labels=[f'{h:02d}:00' for h in wind_data.index], rotation=90)
24 plt.grid(axis='y', alpha=.4)
25 plt.tight_layout()
C:\Users\wi9632\AppData\Local\Continuum\Anaconda3\lib\site-packages\matplotlib\pyplot.py in xticks(*args, **kwargs)
1704 if len(kwargs):
1705 for l in labels:
-> 1706 l.update(kwargs)
1707
1708 return locs, silent_list('Text xticklabel', labels)
C:\Users\wi9632\AppData\Local\Continuum\Anaconda3\lib\site-packages\matplotlib\text.py in update(self, kwargs)
241 """
242 bbox = kwargs.pop('bbox', None)
--> 243 super(Text, self).update(kwargs)
244 if bbox:
245 self.set_bbox(bbox) # depends on font properties
C:\Users\wi9632\AppData\Local\Continuum\Anaconda3\lib\site-packages\matplotlib\artist.py in update(self, props)
883 try:
884 ret = [_update_property(self, k, v)
--> 885 for k, v in props.items()]
886 finally:
887 self.eventson = store
C:\Users\wi9632\AppData\Local\Continuum\Anaconda3\lib\site-packages\matplotlib\artist.py in <listcomp>(.0)
883 try:
884 ret = [_update_property(self, k, v)
--> 885 for k, v in props.items()]
886 finally:
887 self.eventson = store
C:\Users\wi9632\AppData\Local\Continuum\Anaconda3\lib\site-packages\matplotlib\artist.py in _update_property(self, k, v)
876 func = getattr(self, 'set_' + k, None)
877 if func is None or not six.callable(func):
--> 878 raise AttributeError('Unknown property %s' % k)
879 return func(v)
880
AttributeError: Unknown property labels