python - Matplotlib:如何从列表中给出 xticks 值
问题描述
我有以下代码:
import matplotlib.pyplot as plt
import numpy as np
xticks = ['A','B','C']
Scores = np.array([[5,7],[4,6],[8,3]])
colors = ['red','blue']
fig, ax = plt.subplots()
ax.hist(Scores,bins=3,density=True,histtype='bar',color=colors)
plt.show()
这给出了以下输出:
我有两个问题:
如何使条形的高度表示
Scores
例如最左边的红色列的高度应该是 5,而最左边的蓝色列应该是高度 7,等等。如何从
xticks
列表中跨 x 轴分配值,例如左侧两列应在其下方写有“A”,接下来的两列应写有“B”,依此类推。
解决方案
您将直方图与条形图混淆了。在这里你想要一个条形图。如果你想使用 pandas,这将非常简单:
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
xticks = ['A','B','C']
Scores = np.array([[5,7],[4,6],[8,3]])
colors = ['red','blue']
names = ["Cat", "Dog"]
fig, ax = plt.subplots()
pd.DataFrame(Scores, index=xticks, columns=names).plot.bar(color=colors, ax=ax)
plt.show()
如果单独使用 matplotlib 会稍微复杂一些,因为每一列都需要独立绘制,
import matplotlib.pyplot as plt
import numpy as np
xticks = ['A','B','C']
Scores = np.array([[5,7],[4,6],[8,3]])
colors = ['red','blue']
names = ["Cat", "Dog"]
fig, ax = plt.subplots()
x = np.arange(len(Scores))
ax.bar(x-0.2, Scores[:,0], color=colors[0], width=0.4, label=names[0])
ax.bar(x+0.2, Scores[:,1], color=colors[1], width=0.4, label=names[1])
ax.set(xticks=x, xticklabels=xticks)
ax.legend()
plt.show()
推荐阅读
- android - 我可以用 cameraX 只捕捉图像的顶部吗?
- ansible - 在参数中包含所有清单主机的一台主机上执行命令
- r - 从因子变量的先前行中创建数据框中的新列
- r - 有没有办法仅在单击时才在绘图中显示标签?
- git - Powershell 中的 Git 不再获取 .gitconfig 中定义的别名
- c++ - 当 C++ 中的阶乘对于 int 而言太大时如何处理?
- css - Bootstrap 4:每行填充相同的高度
- typescript - TypeScript 判别器可以是可选的吗?
- php - laravel 防止在电子商务中下订单后返回
- php - 我如何知道数据库中的控制器表(Laravel)