我具有用于绘制一些延迟值的条形图的功能:
VAR1 VAR2
---- ----
12 57
我想避免的条形重叠。我试过身材大小,但没有运气。我也尝试过更改import pandas as pd
import numpy as np
%matplotlib inline
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
def plot_bar(g):
auto = [1.36, 5.34, 10.2, 16.48, 24.3, 45.6, 83.89, 155.19, 289.68, 598.85]
four = [1.81, 5.57, 11.48, 18, 27.69, 47.72, 89.11, 164.74, 315.24, 637.89]
eight = [1.44, 5.45, 8.56, 16.64, 26.85, 43.44, 82.41, 152.32, 294.11, 598.57]
sixteen = [2.29, 5.79, 19.99, 18.44, 33.73, 75.31, 177.74, 365.39, 774.57, 1619.99]
thirtytwo = [3.62, 13.84, 25.39, 42.21, 80.14, 150.41, 311.46, 645.37, 1330.94, 2688.48]
N = 10
fig, ax = plt.subplots()
ind = np.arange(N) # the x locations for the groups
width = 0.30 # the width of the bars
p1 = ax.bar(ind, auto, width, color='r')
p2 = ax.bar(ind+width, four, width, color='y')
p3 = ax.bar(ind+width+width, eight, width, color='b')
p4 = ax.bar(ind+width+width+width, sixteen, width, color='k')
p5 = ax.bar(ind+width+width+width+width, thirtytwo, width, color='g')
#ax.set_title('Scores by group and gender')
ax.set_xticks(ind * (5 * width))
ax.set_xticklabels(('1MB', '4MB', '8MB', '16MB', '32MB', '64MB', '128MB', '256MB', '512MB', '1GB'))
plt.xticks(rotation=75)
ax.legend((p1[0], p2[0], p3[0], p4[0], p5[0]), ('Automatic t=8', 't=4','t=8', 't=16', 't=32'))
ax.autoscale_view()
plt.ylabel('time (ms)')
plt.xlabel('Data Size')
plt.yscale("log", nonposy='clip')
plt.tight_layout()
fig.savefig('./graphs/nope_{!s}.eps'.format(g))
以了解其有效性,并且我对如何解决此问题不了解。
给出的代码应该可以工作,请指教。
答案 0 :(得分:3)
另一种替代解决方案是对中心栏使用广泛分开的x位置。绘图的问题在于,条形宽度为0.3,并且有5条,因此每组5 * 0.3 = 1.5。而且,由于居中钢筋在x位置之间的间距为1,所以每组钢筋之间有0.5的重叠。
为避免这种情况,可以使用以下方法在x索引之间使用2的间距来使条居中。我还注意到您没有正确使用所有的x-ticklabel。添加以下两行以使外观看起来不错。
ind = np.arange(0,2*N, 2) # the x locations for the groups
ax.set_xticks(ind + 2*width)
答案 1 :(得分:1)