python - Matplotlib 水平条图(barh):为什么条在顶部而不是彼此相邻?
问题描述
我试图复制这个例子,除了作为水平条形图。
我写了这段代码:
import sys
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.ticker import StrMethodFormatter
import numpy as np
Fams = ['Item1','Item2','Item3','Item4','Item5','Item6','Item7','Item8','Item9','Item10','Item11','Item12','Item13','Item14','Item15','Item16','Item17','Item18','Item19','Item20','Item21']
AllTested = [3,3,3,3,4,4,4,4,4,4,4,5,5,6,6,7,9,9,10,10,27]
BestSubsetTested = [1,0,0,0,3,0,3,0,1,0,1,1,2,4,1,1,8,4,9,8,11]
plt.figure(figsize=[60,40])
X = np.arange(len(Fams))
plt.barh(X,AllTested,color='g')
plt.barh(X + 0.25,BestSubsetTested,color='b')
plt.yticks([i+0.25 for i in range(len(Fams))],Fams)
# Naming the x and y axis
plt.xlabel('Tests')
plt.ylabel('Fams')
plt.savefig('day2.png',format='png')
当我不添加任何宽度参数时,脚本会运行,但在输出中,条形不会彼此相邻:
由于我希望条形图彼此相邻(即 Fam 项目有两个条形图配对在一起 - AllTested 和 BestSubsetTested - ,每个 Fam 项目之间的间隙稍大一些,以便清楚地说明这一点,类似于示例),我添加了“宽度”参数如示例中所示,但出现错误:
我收到一条错误消息:
Traceback (most recent call last):
File "make_plot_species_multiple2.py", line 13, in <module>
plt.barh(X,AllTested,color='g',width=0.25)
谁能帮我?
最终的输出应该和我做的类似,除了
条是成对的(即第 1 项有两个条,第 2 项有两个条)
每对条的名称应该在它的中间
如果您可以向我展示如何将每个条形的名称倾斜 45/使字体更大以使其更具可读性,那就太好了,因为我缩短了此示例的名称。
解决方案
对于barh
,条的宽度由height
参数控制,而不是width
。在这里,我将height
两个调用都设置为 0.4 barh
,并将它们偏移 +/- 0.25。如果像我在这里一样上下偏移条形,则不需要偏移 yticks。
要旋转刻度标签,您可以添加rotation=45
到yticks
函数中。
为了使刻度标签更大,我只是将图形大小从 (60, 40) 减小到 (12, 8)。另一种方法是更改所有刻度标签和轴标签的字体大小。
import sys
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.ticker import StrMethodFormatter
import numpy as np
plt.rcdefaults()
Fams = ['Item1','Item2','Item3','Item4','Item5','Item6','Item7','Item8','Item9','Item10','Item11','Item12','Item13','Item14','Item15','Item16','Item17','Item18','Item19','Item20','Item21']
AllTested = [3,3,3,3,4,4,4,4,4,4,4,5,5,6,6,7,9,9,10,10,27]
BestSubsetTested = [1,0,0,0,3,0,3,0,1,0,1,1,2,4,1,1,8,4,9,8,11]
plt.figure(figsize=[12, 8])
X = np.arange(len(Fams))
plt.barh(X-0.25, AllTested,color='g', height=0.4)
plt.barh(X+0.25, BestSubsetTested,color='b', height=0.4)
plt.yticks([i for i in range(len(Fams))],Fams, rotation=45)
# Naming the x and y axis
plt.xlabel('Tests')
plt.ylabel('Fams')
plt.savefig('day2.png',format='png')
推荐阅读
- core-graphics - 用名字首字母绘制 NSImage
- mysql - Laravel 关系找到根父级
- javascript - Fontawsome Icon 未在本机反应中加载
- c# - 具有不同数量参数的回调
- excel - 我是 VBA 新手,遇到了一些错误
- r - as.character(call[[1]]) 中的 Sparklyr 错误:无法将类型“闭包”强制转换为“字符”类型的向量
- r - 我在安装 R 包时遇到问题。每当我尝试安装时,都会收到一条非零状态的错误消息。是什么原因?
- android - 如何从TextInputLayout android中删除底部边框
- php - Laravel播种机未插入所有列
- ios - UIEdgeInsets 具有可变和硬编码值的不同行为