我有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_name
和z_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')
中的值。有想法吗?
答案 0 :(得分:1)
您需要执行以下操作:
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)