关于python 2.7:在特定日期/时间出生的男性和女性的条形图

Bar graph for male and female born on particular date/time

我需要为以下值绘制条形图:

1
2
3
 male=('2', '1', '2', '6', '6', '1') # list may increase
 time=('Tue_Aug_13_04:37:40_2013', 'Mon_Jul__1_02:33:11_2013','Tue_Aug_13_04:37:40_2013', 'Thu_Jul__4_01:53:32_2013', 'Mon_Jul__1_10:05:55_2013','Mon_Jul__1_04:15:25_2013')# list may increase
female=(16, 11, 16, 12, 12, 11) # list may increase

男性为绿色,女性为红色,如下图所示:

example-plot

我尝试的代码:

1
2
3
4
5
6
7
8
9
import matplotlib.pyplot as plt
from matplotlib.patches import Ellipse, Polygon

fig = plt.figure()
ax1 = fig.add_subplot(131)
ax1.bar(male, color='red', edgecolor='black')
ax1.bar(bottom=range(female), color='blue', edgecolor='black')
ax1.set_xticks(time)
plt.show()

为了绘制条形图,我需要做些什么修改,如为我的值所附的图像所示?


1.)我强烈建议您熟悉Python语法:

  • 方括号和圆括号括起来的列表有什么区别?
  • '2'2有什么区别?

2.)使用matplotlib文档为您使用的plot命令找出正确的语法。

3.)在这种特殊情况下:要让您继续,请将数据更改为:

1
2
3
male=[2, 1, 2, 6, 6, 1] # list may increase  
time=['Tue_Aug_13_04:37:40_2013', 'Mon_Jul__1_02:33:11_2013','Tue_Aug_13_04:37:40_2013', 'Thu_Jul__4_01:53:32_2013', 'Mon_Jul__1_10:05:55_2013','Mon_Jul__1_04:15:25_2013']# list may increase  
female=[16, 11, 16, 12, 12, 11] # list may increase

请仔细检查发生了什么变化。

4.)您试图调用的bar命令没有足够的输入参数。使用上面更改的数据,尝试以下操作:

1
2
ax1.bar(range(len(time)),male,width=0.5, color='red', edgecolor='black')
ax1.bar(range(len(time)),female,width=0.5,bottom=male,color='blue', edgecolor='black')

发生了什么变化?

  • 您需要以下输入:left, height, width=0.8
  • 你只有一个
  • 由于日期是以字符串形式给出的,因此需要一个用于x轴的通用计数器,因此range(len(time))提供的tics与time中的条目一样多。
  • 现在,根据malefemale中的值指定height,这些值都不应该是字符串!
  • 定义一个width
  • 在这种情况下,您希望将条形图堆叠起来,因此,请将第一组值指定为第二组的bottom

4.)因为time是由字符串组成的,所以不能将其用于刻度。相反,尝试:

1
ax1.set_xticklabels(time,rotation=90)

这里,您使用来自time的字符串作为勾号标签。rotation=90是一个很好的特性,这样长字符串就不会重叠。

5.)如果标签被绘图窗口切断,请尝试以下操作:

1
2
plt.tight_layout()
plt.show()

这会让你回到正轨。

网页搜索的好关键词包括:

  • Matplotlib堆积条形图
  • Matplotlib标记标签旋转
  • Matplotlib Ticks日期