使用matplotlib改进滴答和网格

时间:2014-08-18 13:58:14

标签: python matplotlib data-visualization

我有以下代码:

import datetime
from matplotlib.ticker import FormatStrFormatter
from pylab import *

hits=array([100,250,130,290])
misses=array([13,18,105,15])
X = np.arange(len(hits))

base=datetime.date(2014, 8, 1)
date_list=array([base + datetime.timedelta(days=x) for x in range(0,len(hits))])

fig,ax = plt.subplots(1,1,1,figsize=(15,10))

bar_handles=[]
for i in range(len(hits)):
    bar_handles.append(
        ax.barh(
            -X[i],hits[i],facecolor='#89E07E', edgecolor='white',
            align='center',label="Impressions"))
    bar_handles.append(
        ax.barh(-X[i],-misses[i],facecolor='#F03255', edgecolor='white',
                align='center',label="Misses"))

for i in range(len(bar_handles)):
    patch = bar_handles[i].get_children()[0]
    bl = patch.get_xy()
    percent_x = 0.5*patch.get_width() + bl[0]
    percent_y = 0.5*patch.get_height() + bl[1]
    percentage=0
    if i%2==0:
        j=i/2
        percentage = 100*(float(hits[j])/float(hits[j]+misses[j]))
    else:
        j=(i-1)/2
        percentage = 100*(float(misses[j])/float(hits[j]+misses[j]))
    ax.text(percent_x,percent_y,"%d%%" % percentage,ha='center',va='center')

for i in range(len(hits)):
    plt.yticks(-X,date_list)
plt.tick_params(which='both', width=0)

max_hits_num=round(np.amax(hits),-2)
max_miss_num=round(np.amax(misses),-2)
xticks=np.arange(-max_miss_num,max_hits_num,50)
minorLocator = FixedLocator(xticks)
majorLocator = FixedLocator([0])
ax.xaxis.set_major_locator(majorLocator)
ax.xaxis.set_minor_locator(minorLocator)
ax.xaxis.set_minor_formatter(FormatStrFormatter('%d'))

ax.yaxis.grid(False)
ax.xaxis.grid(b=True,which='minor', color='0.5', linestyle='-',linewidth=1)
ax.xaxis.grid(b=True,which='major', color='b', linestyle='-',linewidth=2.5)

# ax2 = plt.twinx()
# ax2.grid(False)
# for i in range(len(hits)):
#     plt.yticks(-X,hits+misses)

plt.show()

这会生成以下图像:

enter image description here

我留下了一个大问题和两个小问题。最大的问题是我想在正确的y轴上添加值的总和。这是添加113,268,235和305.尝试twinxsharesubplots的某些内容对我来说无效。

小问题是:

  1. 在x轴上,0左侧的值应该没有减号。
  2. 如果仔细观察,您会看到蓝色主要垂直网格线与灰色小网格线重合。很高兴只有蓝色的。这可以通过首先使用0xticks中找到numpy.where的索引,然后使用{{1}删除此元素来解决}}。

0 个答案:

没有答案