Pyplot上的多个x标签

时间:2018-10-29 10:40:43

标签: python matplotlib seaborn

以下是我的折线图代码。我想在当前标签下添加另一个x标签(这样我就可以显示星期几)。

import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns;sns.set()

sns.set()

data = pd.read_csv("123.csv")

data['DAY']=["01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31"]

plt.figure(figsize=(15,8))  
plt.plot('DAY','SWST',data=data,linewidth=2,color="k")
plt.plot('DAY','WMID',data=data,linewidth=2,color="m")

plt.xlabel('DAY', fontsize=20)
plt.ylabel('VOLUME', fontsize=20)
plt.legend()

Line Graph

编辑:遵循文档之后,我有2个问题。刻度已从31更改为16,并且星期几与天数不一致。

data['DAY']=["01","02","03","04","05","06","07","08","09","10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31"]

tick_labels=['1','\n\nThu','2','\n\nFri','3','\n\nSat','4','\n\nSun','5','\n\nMon','6','\n\nTue','7','\n\nWed','8','\n\nThu','9','\n\nFri','10','\n\nSat','11','\n\nSun','12','\n\nMon','13','\n\nTue','14','\n\nWed','15','\n\nThu','16','\n\nFri','17','\n\nSat','18','\n\nSun','19','\n\nMon','20','\n\nTue','21','\n\nWed','22','\n\nThu','23','\n\nFri','24','\n\nSat','25','\n\nSun','26','\n\nMon','27','\n\nTue','28','\n\nWed','29','\n\nThu','30','\n\nFri','31','\n\nSat']
tick_locations = np.arange(31)

plt.figure(figsize=(15,8))

plt.xticks(tick_locations, tick_labels)
plt.plot('DAY','SWST',data=data,linewidth=2,color="k")
plt.plot('DAY','WMID',data=data,linewidth=2,color="m")     

plt.xlabel('DAY', fontsize=20)
plt.ylabel('VOLUME', fontsize=20)
plt.legend()

plt.show()

Line graph2

2 个答案:

答案 0 :(得分:1)

您要查找的pyplot函数为plt.xticks()。这实际上是ax.set_xticks()ax.set_xticklabels()

的组合

来自documentation

  

参数:

     

滴答声:array_like

     

应放置刻度的位置列表。您可以通过   空列表以禁用xticks。

     

标签:

     

array_like,可选在给定位置放置的显式标签列表   位置。

您需要类似下面的代码。请注意,您可能应该显式设置刻度位置和标签,以避免将标签设置在错误的位置:

tick_labels = ['1','\n\nThu','2',..., '31','\n\nSat')
plt.xticks(tick_locations, tick_labels)

请注意,面向对象的API(即使用ax.)允许使用更多可自定义的图。

更新

编辑后,我看到您要在下面添加的标签属于同一列表。因此,标签列表的长度实际上为62。因此,您需要将列表的每2个元素连接在一起:

tick_labels=['1','\n\nThu','2','\n\nFri','3','\n\nSat','4','\n\nSun','5','\n\nMon','6','\n\nTue','7','\n\nWed','8',
             '\n\nThu','9','\n\nFri','10','\n\nSat','11','\n\nSun','12','\n\nMon','13','\n\nTue','14','\n\nWed','15',
             '\n\nThu','16','\n\nFri','17','\n\nSat','18','\n\nSun','19','\n\nMon','20','\n\nTue','21','\n\nWed','22',
             '\n\nThu','23','\n\nFri','24','\n\nSat','25','\n\nSun','26','\n\nMon','27','\n\nTue','28','\n\nWed','29',
             '\n\nThu','30','\n\nFri','31','\n\nSat']

tick_locations = np.arange(31)

new_labels = [ ''.join(x) for x in zip(tick_labels[0::2], tick_labels[1::2]) ]
plt.figure(figsize=(15, 8))

plt.xticks(tick_locations, new_labels)

plt.show()

enter image description here

答案 1 :(得分:0)

也不要在未设置刻度线位置的情况下使用ax.set_xticklabels。可以通过ax.set_xticks完成。

ax.set_xticks(...)
ax.set_xticklabels(...)

当然,您可以对pyplot进行相同操作

ax = plt.gca()
ax.set_xticks(...)
ax.set_xticklabels(...)