我是matplotlib的新手,希望得到一些帮助来显示多层x-labels。
我有以下代码:
import matplotlib.pyplot as plt
data = {
"midterm": {"anna": [2,8,6], "adams": [5,10,8], "jane":[4,10,8]},
"final": {"anna": [3,7,5], "adams": [6,8,7], "jane":[2,8,7]}
}
for key in data.keys():
y = data[key]["anna"] + data[key]["adams"]+data[key]["jane"]
plt.plot(y, label=key)
x_location = [1,4,7]
x_labels = ["anna", "adams", "jane"]
plt.xticks(x_location, x_labels)
plt.legend()
plt.show()
它输出以下图:Current Output
我希望X标签是多层的,如:Required Output
请问我该怎么做?
1条答案
按热度按时间alen0pnh1#
你可以使用下面的代码来实现。希望这对你有帮助...
小小的解释...
1.以易于绘制的格式获取数据。基本上,索引必须是这样的,级别0是名称(因此这将是x轴中的最低级别),然后是主题(数学,工程,...)。建议您打印df以查看其外观
1.使用pandas绘图,这将为您提供所需的绘图。
1.对于xticklabels的内部(上部)集合,您需要subjects,它位于第1级索引中。注意,对于lineplot,matplotlib在左侧和右侧提供了额外的空间(空格),并且为了使您能够使用
set_xticklabels()
,您需要在数组的开头和结尾添加空格,这就是我所做的1.接下来,绘制每次主题值完成时都会出现的垂直线......添加-0.5,以便线在刻度之间,并且您可以获得每条分隔线的位置。
vlines
将帮助您绘制这些。请注意,在这里,我跳过了第一条和最后一条垂直线,因为我没有在您预期的图片中看到它1.最后,在两个位置之间添加文本,并稍微更改了大小和粗体,以区分xticklabels的第一级和第二级。
部分部件已从here借用
剧情