首页 > 解决方案 > 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()

这给出了以下输出:

代码直方图

我有两个问题:

  1. 如何使条形的高度表示Scores例如最左边的红色列的高度应该是 5,而最左边的蓝色列应该是高度 7,等等。

  2. 如何从xticks列表中跨 x 轴分配值,例如左侧两列应在其下方写有“A”,接下来的两列应写有“B”,依此类推。

标签: pythonmatplotlibhistogram

解决方案


您将直方图与条形图混淆了。在这里你想要一个条形图。如果你想使用 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()

在此处输入图像描述


推荐阅读