问题
I want to keep the width of the bars the same no matter the number of bars compared is high or low. I am using Matplotlib stacked bar chart. the width of the bars is relative to the number of the bars. Here is my sample code.
How can I make the width the same no matter the number of bars I compare from 1 to 10
import numpy as np
import matplotlib.pyplot as plt
N =1
ind = np.arange(N) # the x locations for the groups
width = 0.35 # the width of the bars: can also be len(x) sequence
design = []
arch = []
code = []
fig = plt.figure()
b = [70]
a= np.array([73])
c = [66]
p1 = plt.bar(ind, a,width, color='#263F6A')
p2 = plt.bar(ind, b, width, color='#3F9AC9', bottom=a)
p3 = plt.bar(ind, c, width, color='#76787A', bottom=a+b)
plt.ylabel('Scores')
plt.title('CQI Index')
plt.xticks(ind+width/2., ('P1'))#dynamic - fed
plt.yticks(np.arange(0,300,15))
plt.legend( (p1[0], p2[0], p3[0]), ('A','B','C') )
plt.grid(True)
plt.show()
Thank you
回答1:
The width of the bars doesn't change, the scale of your image changes. If you want the scale to stay the same you have to manually specify what range you want to show, whether your plot is 10x10, 100x100, or 1,000,000,000 x 10
Edit:
If I understand correctly, what you want is something like this:
Graph 1 - 2 bars:
10
+---------------------------+
| |
| |
| |
| |
| |
| 4_ |
| | | |
| 2_ | | |
| | | | | |
| | | | | |
+---------------------------+ 10
Graph 2 - add 2 more bars
10
+---------------------------+
| |
| |
| 7_ |
| | | |
| | | |
| 4_ | | |
| | | 3_ | | |
| 2_ | | | | | | |
| | | | | | | | | |
| | | | | | | | | |
+---------------------------+ 10
Where the apparent width of the bars hasn't changed from Graph 1 to Graph 2. If this is what you want to do then you'll need to set the scale of your plot
You can do that with
import matplotlib
matplotlib.use('GTKAgg')
import matplotlib.pyplot as plt
import gobject
fig = plt.figure()
ax = fig.add_subplot(111)
def draw1():
plt.bar(0,2)
plt.bar(2,4)
ax.set_xlim((0,10))
ax.set_ylim((0,10))
fig.canvas.draw()
return False
def draw2():
plt.bar(4,3)
plt.bar(6,7)
ax.set_xlim((0,10))
ax.set_ylim((0,10))
fig.canvas.draw()
return False
draw1()
gobject.timeout_add(1000, draw2)
plt.show()
来源:https://stackoverflow.com/questions/3448350/how-to-keep-the-width-of-the-bars-the-same-no-matter-the-number-of-bars-we-compa