Python 使用Matplotlib格式化打印

Python 使用Matplotlib格式化打印,python,pandas,matplotlib,Python,Pandas,Matplotlib,我是Pandas和Matplotlib的初学者,在使用Pandas时,我对设置绘图格式有一些疑问。对于面积图,我有以下代码: 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.

我是Pandas和Matplotlib的初学者,在使用Pandas时,我对设置绘图格式有一些疑问。对于面积图,我有以下代码:

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)
现在我想改变以下几个方面:

  • x轴上的值是一天中的时间。它们应该从00:00-24:00开始显示。所以每小时都应该有一个条目。由于缺少空间,条目应垂直(而不是水平)书写
  • 导出png文件时,绘图周围有一个灰色框。事实不应如此。相反,应该有一条细黑线作为边缘
  • 我希望在y轴的每个入口都有一些水平线。这条线不应该太强,而应该是透明的,这样你就可以看到它,而不会占主导地位
是否可以使用Matplotlib(或任何其他python库)执行此操作

编辑:这里有输入数据:

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
编辑:在Jupyter中使用JohanC的解决方案代码时出现错误消息

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
AttributeError回溯(最近一次调用)
在()
21斧头组(1,24)
22 ax.设定值(0,50)
--->23 plt.xticks(wind_data.index,标签=[f'{h:02d}:00',用于wind_data.index中的h,旋转=90)
24 plt.网格(轴=y',α=0.4)
25 plt.紧凑型布置图()
C:\Users\wi9632\AppData\Local\Continuum\Anaconda3\lib\site packages\matplotlib\pyplot.py在xticks中(*args,**kwargs)
1704如果len(kwargs):
1705对于l in标签:
->1706 l.更新(kwargs)
1707
1708返回LOC,静默列表('Text xticklabel',标签)
更新中的C:\Users\wi9632\AppData\Local\Continuum\Anaconda3\lib\site packages\matplotlib\text.py(self,kwargs)
241         """
242 bbox=kwargs.pop('bbox',无)
-->243超级(文本,自我)。更新(kwargs)
244如果bbox:
245 self.set_bbox(bbox)#取决于字体属性
更新中的C:\Users\wi9632\AppData\Local\Continuum\Anaconda3\lib\site packages\matplotlib\artist.py(self,props)
883尝试:
884 ret=[\u更新\u属性(self、k、v)
-->885表示道具中的k和v。项()
886最后:
887 self.eventson=商店
C:\Users\wi9632\AppData\Local\Continuum\Anaconda3\lib\site packages\matplotlib\artist.py in(.0)
883尝试:
884 ret=[\u更新\u属性(self、k、v)
-->885表示道具中的k和v。项()
886最后:
887 self.eventson=商店
属性(self,k,v)中的C:\Users\wi9632\AppData\Local\Continuum\Anaconda3\lib\site packages\matplotlib\artist.py
876 func=getattr(自“设置”+k,无)
877如果func为None或非six。可调用(func):
-->878 raise AttributeError('未知属性%s“%k”)
879返回函数(v)
880
AttributeError:未知的属性标签

下面是一个使用matplotlib的示例。现在是更新问题中的数据

对于xticks,勾号位置和标签可以使用plt.xticks()``设置,它也接受旋转角度。要获得黑色边框,似乎需要通过
plt.figure
设置
线宽
,而edgecolor是
plt.savefig
的参数

plt.grid
具有用于在一个或两个方向上显示网格线的参数。可以设置
alpha
值,使这些线变得不那么突出或更突出

将熊猫作为pd导入
从matplotlib导入pyplot作为plt
%matplotlib内联
柱=[“1号楼”、“2号楼”、“3号楼”、“4号楼”、“5号楼”]
幂_值=[[7.04,7.04,7.04,7.04,7.04],[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]]
风数据=pd.数据帧(功率值,索引=范围(1,25),列=列)
图=plt.图(线宽=1,图尺寸=(7,5))
ax=wind\U data.plot.area(ax=plt.gca(),color=plt.get\U cmap('Set1')。colors)
plt.图例(loc='中左',bbox_至_锚=(1.0,0.5))
ax.设置面颜色(“白色”)
ax.设置标签(“一天中的时间”)
ax.set_ylabel(“以千瓦为单位的功率”)
ax.set_xlim(1,24)
ax.set_ylim(0,50)
plt.xticks(wind_data.index,标签=[f'{h:02d}:00',用于wind_data.index中的h),旋转=90)
平面网格(轴=y',α=0.4)
plt.紧_布局()
plt.savefig('wind_data.png',edgecolor='black',dpi=300)
plt.show()


PS:如果您的Python版本早于3.6,请将
f'{h:02d}:00'
替换为
'%02d:00'%h

这些格式问题实际上与matplotlib(Pandas用于打印的包)有关,而不是Pandas。使用“matplotlib”搜索这些内容“添加的内容会让你更接近答案。你能分享一些数据吗?”?很难知道你是什么plotting@CodeDifferent当前位置我刚做了谢谢约翰的回答。不幸的是,当我在Jupyter中使用您发布的代码时,我会遇到很多错误。我编辑了原始帖子并添加了输入数据。也许这对你有帮助。对我来说,它很好用,也可以放在笔记本里。我用你的新数据更新了代码,所以我需要24而不是25个值。如果仍然遇到问题,请将错误消息添加到问题中。这似乎