我有以下代码:
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”,依此类推。
答案 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()
如果单独使用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()
答案 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部分问题。我不确定高度,因为我还没有绘制直方图。