并排绘制具有不同大小的多个列表?

时间:2019-06-18 07:50:19

标签: python list matplotlib plot

我有4个列表,如下所示:

x_name=[’01-2014’,’03-2014’,’05-2014’,’01-2015’,’03-2015’]
x_value=[3,5,1,5,7]

z_name==[’01-2014’,’03-2014’,’04-2014’,’07-2014’,’05-2014’,’01-   
        2015’,’02-2015’,’03-2015’]
z_value=[6,8,2,4,6,8,1,2]

我想并排绘制这些列表,以便如果它们在(x_namez_name中具有相同的名称,则它们的对应值(在x_value和{{1}中) })应并排绘制,z_value中不在z_name中的名称(例如'04 -2014','02-2015'等)应分配为0在情节中。我已经编写了以下代码:

x_name

但是,出了点问题,我无法将0值分配给不在bar_width = 0.75 opacity = 0.8 index = len(z_name) fig, axs = plt.subplots() rects0=axs.bar(z_name, z_value,bar_width,alpha=opacity,color='red',label=key) rects0=axs.bar(index + bar_width, x_value, bar_width,alpha=opacity,color='g',label='true') plt.xlabel(‘x and z names’) plt.ylabel('x and z values') 中的值。有想法吗?

1 个答案:

答案 0 :(得分:1)

您需要执行以下操作:

  • 为两个条形图使用正确的x值
  • 使用align=edge模式以及正负条宽度将条彼此相邻放置
  • 使用较小的条形宽度以避免条形重叠

我不知道您为什么使用index = len(z_name)


import matplotlib.pyplot as plt

x_name=['01-2014','03-2014','05-2014','01-2015','03-2015']
x_value=[3,5,1,5,7]

z_name=['01-2014','03-2014','04-2014','07-2014','05-2014','01-2015','02-2015','03-2015']
z_value=[6,8,2,4,6,8,1,2]

bar_width = 0.25
opacity = 0.8
index = len(z_name)

fig, axs = plt.subplots()

rects0=axs.bar(z_name, z_value, bar_width, align='edge', alpha=opacity, color='r')
rects0=axs.bar(x_name, x_value, -bar_width, align='edge',alpha=opacity, color='g')

plt.xlabel('x and z names')
plt.ylabel('x and z values')
plt.xticks(rotation=30)

enter image description here