Matplotlib:如何从列表中给出xticks值

时间:2019-01-24 18:54:44

标签: python matplotlib histogram

我有以下代码:

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()

哪个给出以下输出:

histogram of code

我有两个问题:

  1. 如何使条形的高度代表Scores中的值,例如最左边的红色列的高度应为5,最左边的蓝色列的高度应为7,依此类推。

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

3 个答案:

答案 0 :(得分:2)

您将直方图与条形图混淆了。在这里,您需要一个条形图。如果您想使用熊猫,这将非常简单:

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()

enter image description here

如果单独使用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()

enter image description here

答案 1 :(得分:1)

您已经为直方图做了很多工作。现在,您只需要一些条形图。

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()

# Width of bars
w=.2

# Plot both separately
ax.bar([1,2,3],Scores[:,0],width=w,color=colors[0])
ax.bar(np.add([1,2,3],w),Scores[:,1],width=w,color=colors[1])

# Assumes you want ticks in the middle
ax.set_xticks(ticks=np.add([1,2,3],w/2))

ax.set_xticklabels(xticks)
plt.show()

答案 2 :(得分:0)

plt.xticks(range(0, 6), ('A', 'A', 'B', 'B', 'C', 'C'))可以回答我相信的第2部分问题。我不确定高度,因为我还没有绘制直方图。